Возврат нескольких совпадений с 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:]