Python findall中的正则表达式析取不匹配完整的子串

时间:2015-06-30 17:47:16

标签: python regex

在几个在线测试者中,正则表达式a(b|c)z匹配字符串'abz acz'中的'abz'和'acz',但Python的re.findall()仅匹配'b'和'c'。

我错过了什么?

In[42]: re.findall(r'a(b|c)z', 'abz acz')
Out[42]: ['b', 'c']

2 个答案:

答案 0 :(得分:3)

使用findall,将返回捕获的组:

documentation ...

中所述
  

返回字符串中pattern的所有非重叠匹配,作为字符串列表。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。结果中包含空匹配,除非它们触及另一场比赛的开头。

您只需在此处使用character class

>>> re.findall(r'a[bc]z', 'abz acz')
['abz', 'acz']

答案 1 :(得分:0)

那是因为你正在使用捕获的parens

re.findall(r'a(?:b|c)z', 'abz acz')

?:会导致它成为非捕获括号