返回 RoboBrowser/BeautifulSoup 的多个匹配项
Returning multiple matches with RoboBrowser/BeautifulSoup
我正在尝试使用 find/find_all-method 进行多个正则表达式匹配,但无法正常工作。
一段 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 毁了它吗?还是您不能 return 在单个正则表达式中进行多个匹配?真的不知道怎么解决。我总是可以将 return 值存储在一个字符串中,然后使用拆分或正则表达式再次解析它,但我更愿意直接使用 find 或 find_all.
获取它
对find_all
函数的误解。它所做的一切 return 匹配给定条件的元素列表。在你的情况下,它是一个正则表达式。您的正则表达式具有子模式。但这在这里并不真正相关。 find_all
不被正则表达式分割。所以
['Week 22:\xa3871983']
是预期的结果。如果你想把它转换成 ['22', '3871983']
import re
for result in results:
parts = re.split("\s", result)
parts[0] = parts[0][4:]
我正在尝试使用 find/find_all-method 进行多个正则表达式匹配,但无法正常工作。
一段 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 毁了它吗?还是您不能 return 在单个正则表达式中进行多个匹配?真的不知道怎么解决。我总是可以将 return 值存储在一个字符串中,然后使用拆分或正则表达式再次解析它,但我更愿意直接使用 find 或 find_all.
获取它对find_all
函数的误解。它所做的一切 return 匹配给定条件的元素列表。在你的情况下,它是一个正则表达式。您的正则表达式具有子模式。但这在这里并不真正相关。 find_all
不被正则表达式分割。所以
['Week 22:\xa3871983']
是预期的结果。如果你想把它转换成 ['22', '3871983']
import re
for result in results:
parts = re.split("\s", result)
parts[0] = parts[0][4:]