禁用"组成为元组" Python的行为re.findall()

时间:2014-11-15 12:25:15

标签: python regex string python-2.7

当我在包含两个或更多组的 Python 2.x 中使用正则表达式时,re.findall()会返回正则表达式包含的n个组的n元组列表。我知道它应该像这样工作,但有没有办法规避这种行为?

例如,当我跑

import re
sentence = 'We also learned that the !!probability of an outcome is its relative frequency over endless repetitions of the experiment. '
print re.findall(r'[Pp]robabilit(y|ies)',sentence)

它只返回['y']。但是,我希望probability返回。对于包含“概率”的其他句子,我希望返回probabilities,依此类推。

1 个答案:

答案 0 :(得分:4)

当存在一个或多个组时,re.findall的行为会发生变化。它返回一个组列表;如果有多个组,则为元组列表。

您可以通过将群组设为非捕获群来获得所需内容:

>>> re.findall(r'[Pp]robabilit(?:y|ies)',sentence)
['probability']

或者使用re.finditer和列表理解:

>>> [m.group() for m in re.finditer(r'[Pp]robabilit(y|ies)',sentence)]
['probability']