繁体   English   中英

字符串模式正则表达式python

[英]String pattern Regular Expression python

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

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


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

按照我的理解,它应该只返回abababab9 ,为什么它返回ab 孤单

您没有阅读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

您已经通过(...)两个匹配组进行了配置, 第一个组((ab)*[0-9])第二个组(ab) 因此,您将获得这两个结果。 要仅获得第一个组,可以使第二个成为非捕获组 这是通过?:完成的。 因此,此结果未交付。

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

正则表达式可视化

Debuggex演示

这只匹配abababab9

编辑1:

这是对正则表达式的分组概念的解释: 分组和捕获

在内部使用?:删除第二个组捕获(ab)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM