2017-05-30 120 views
1

我试图用find/find_all方法获得多个正则表达式匹配,但无法让它正常工作。与RoboBrowser/BeautifulSoup返回多个匹配

一块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来获取它。

回答

0

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:]