2017-06-04 136 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

伟大的答案谢谢!得到它的工作 –

相关问题