Возврат нескольких совпадений с RoboBrowser/BeautifulSoup

Я пытаюсь получить несколько регулярных выражений с помощью метода find/find_all, но не могу заставить его работать.

Кусок HTML-кода может быть примерно таким:

<b>Week</b> 22: 3871983

Затем в коде я пытаюсь следующее:

import re
from robobrowser import RoboBrowser

browser = RoboBrowser(parser='html.parser')
browser.open(some_url_containing_the_above_html_code)
result = browser.find_all(text=re.compile('Week\s+(\d+).*?(\d+)'))

print(result)

Который выводит что-то вроде:

['Week 22:\xa3871983']

Я ожидал что-то вроде:

['22', '3871983']

\ Xa разрушает это? Или вы не сможете вернуть несколько совпадений в пределах одного регулярного выражения? Не знаю, как это решить. Я всегда мог сохранить возвращаемое значение в строке и еще раз проанализировать его с помощью split или regex, но я бы предпочел получить его напрямую с помощью find или find_all.

1 ответ

Решение

Недоразумение о find_all функция. Все это возвращает список элементов, соответствующих заданному условию. В вашем случае это регулярное выражение. У вашего регулярного выражения есть подшаблоны. Но это не совсем уместно здесь. find_all не делится на регулярное выражение. Так

['Week 22:\xa3871983']

это ожидаемый результат. Если вы хотите, чтобы это было преобразовано в ['22', '3871983']

 import re
 for result in results:
     parts = re.split("\s", result)
     parts[0] = parts[0][4:]
Другие вопросы по тегам