![](/img/trans.png)
[英]Regular expression for substitution of similar pattern in a string in 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])
这只匹配abababab9
。
编辑1:
这是对正则表达式的分组概念的解释: 分组和捕获
在内部使用?:
删除第二个组捕获(ab)
:
testing= re.findall(r'((?:ab)*[0-9])',temp);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.