re.findall返回重复的匹配项

时间:2018-08-23 02:52:29

标签: python regex

我构造了这样的图案对象

text_regex = re.compile(r"""(
(\w+)
)""", re.UNICODE|re.VERBOSE)

我尝试过:

In [75]: text_regex.findall("put returns between paragraphs")
Out[75]: 
[('put', 'put'),
 ('returns', 'returns'),
 ('between', 'between'),
 ('paragraphs', 'paragraphs')]

它返回双重匹配。

如果我保留所附的()
如何避免重复?

1 个答案:

答案 0 :(得分:2)

从正则表达式中删除多余的括号:

text_regex = re.compile(r"""(\w+)""", re.UNICODE|re.VERBOSE)
text_regex.findall("put returns between paragraphs")

收益

['put', 'returns', 'between', 'paragraphs']

您正在获取元组列表,因为findall documentation指出:

  

如果模式中存在一个或多个组,则返回一个组列表;如果模式包含多个组,则这将是一个元组列表。

因此,如果您想要一个组但不希望捕获组,请使用(?:PATTERN)而不是regular expression documentation中提到的(PATTERN)