字符串模式正则表达式python

时间:2014-03-28 13:30:02

标签: python regex

我是正则表达式的新手。我写了以下正则表达式来查找给定字符串中的abababab9。正则表达式返回两个结果,但我期待一个结果。

testing= re.findall(r'((ab)*[0-9])',temp);


**Output**: [('abababab9', 'ab')]

根据我的理解,它应该只返回abababab9,为什么它单独返回ab

3 个答案:

答案 0 :(得分:2)

你没有'阅读findall文档:

  

返回字符串中所有非重叠匹配的列表。

     

如果模式中存在一个或多个捕获组,则返回组列表; 如果模式具有,则这将是元组列表   不止一个小组。

     

结果中包含空匹配。

如果你看一下re模块,捕获组是括号内的子模式,如(ab)

如果您只想获得完整匹配,可以使用以下解决方案之一:

re.findall(r'(?:ab)*[0-9]', temp)  # use non-capturing groups

[groups[0] for groups in re.findall(r'(ab)*[0-9]', temp)] # take the first group

[match.group() for match in re.finditer(r'(ab)*[0-9]', temp)] # use finditer

答案 1 :(得分:1)

您已由(...)两个匹配组配置第一组((ab)*[0-9])第二组(ab)。因此,你得到这两个结果。要获得第一组,您可以将第二组设为非捕获组。这是由?:完成的。所以这个结果没有交付。

((?:ab)*[0-9])

Regular expression visualization

Debuggex Demo

这只匹配abababab9

修改1:

以下是正则表达式分组概念的解释:groups and capturing

答案 2 :(得分:0)

使用(ab)内部删除第二个捕捉?:的群组:

testing= re.findall(r'((?:ab)*[0-9])',temp);