0

我有以下文字:

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') 而不再次输入它们?

有任何想法吗?谢谢。

4

3 回答 3

6

re.findall():如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。

试试这个:

re.findall('apples and (?:oranges|lemons)',text)

(?:...)是正则括号的非捕获版本。

于 2012-04-13T00:43:21.210 回答
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']
[]
于 2012-04-13T00:45:21.683 回答
0

您是否尝试过非捕获组re.search('apples and (?:oranges|lemons)',text)

于 2012-04-13T00:43:20.057 回答