2017-06-04 142 views
1
 import re 
     text = 'fruits to be sold are apple orange and peach' 
     x = re.findall(r'fruits.*(apple|orange|peach).*',text,re.I) 
     print(x) 

該代碼的目標是返回一個列表,其中包含單詞'fruits'後面的句子中的水果名稱。re.findall()不返回所有匹配

所以預期的結果應該是像

['apple','orange','peach'] 

而是我得到只有在sentence.i.e桃的最後一場比賽。 有人可以幫我解決問題嗎?

+0

你有沒有嘗試在網上正則表達式測試調整你的模式?像https://regex101.com/? – wwii

+1

你的表情包含「水果」。該字符串只包含「水果」一次。那麼怎麼會有不止一場比賽呢? – khelwood

+1

您的模式將匹配「水果」,然後是其中一個替代品,它只會搜索一次該字符串。也許可以分兩步進行:捕獲'水果*',然後搜索結果。 – wwii

回答

0

您可以通過更換您的正則表達式的簡單

x = re.findall(r'(apple|orange|peach)',text,re.I) 
+0

生成器,但我想捕獲後單詞'水果' –

+0

'findall'給出非重疊匹配,所以你不能直接使用那一個。也許你正在尋找的是類似're.findall('(apple | orange | peach)',re.match(r'fruits(。*)',text).group(1))'? – fuglede

+0

偉大的答案謝謝!得到它的工作 –

相關問題