2017-05-30 76 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:]