我有以下文字:
text='apples and oranges apples and grapes apples and lemons'
我希望使用正则表达式来实现如下所示:
'苹果和橘子'
“苹果和柠檬”我试过这个re.findall('apples and (oranges|lemons)',text)
,但它不起作用。
更新:如果'oranges'和'lemons'是一个列表:new_list=['oranges','lemons']
,我怎么能不键入它们去?('''oranges'|'lemons')再次?
有什么想法吗?感谢。
答案 0 :(得分:6)
re.findall()
:如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。
试试这个:
re.findall('apples and (?:oranges|lemons)',text)
(?:...)
是常规括号的非捕获版本。
答案 1 :(得分:2)
你所描述的应该起作用:
在example.py中:
import re
pattern = 'apples and (oranges|lemons)'
text = "apples and oranges"
print re.findall(pattern, text)
text = "apples and lemons"
print re.findall(pattern, text)
text = "apples and chainsaws"
print re.findall(pattern, text)
正在运行python example.py
:
['oranges']
['lemons']
[]
答案 2 :(得分:0)
您是否尝试过非捕获组re.search('apples and (?:oranges|lemons)',text)
?