[英]Matching an object and a specific regex with Python
给定一个文本,我需要检查每个字符的两边是否都有(已编辑的) 3个大写字母,如果有,请将其添加到一个这样显示的字符串中。
我写了以下代码: m = re.match("[AZ]{3}.[AZ]{3}", text)
(比如说text =“ AAAbAAAcAAA”)
我希望在匹配对象中获得两个组:“ AAAbAAA”和“ AAAcAAA”
现在,当我调用m.group(0)
我得到了“ AAAbAAA”,这是正确的。 但是,当调用m.group(1)
,我发现没有这样的组,这意味着“ AAAcAAA”不是匹配项。 为什么?
另外,在调用m.groups()
,我得到一个空的元组,尽管我应该得到一个匹配的元组,这意味着在我的情况下,我应该得到一个带有“ AAAbAAA”的元组。 为什么不起作用?
您的模式中没有任何组。 要捕获组中的某物,必须用括号将其括起来:
([A-Z]{3}).[A-Z]{3}
m.group(0)
是例外,它将始终包含整个匹配项。
查看您的问题,听起来您实际上并不是在寻找捕获组,而是重叠的匹配项。 在正则表达式中,组是指比赛中较小的部分,留作以后使用。 例如,如果您尝试将电话号码与类似
([0-9]{3})-([0-9]{3}-[0-9]{4})
那么区号将在group(1)
,本地部分在group(2)
,而整个事物将在group(0)
。
您要查找重叠的匹配项。 这是一个Stack Overflow答案,解释了如何在Python regex中进行重叠匹配 ,这是我最喜欢的捕获组和regex参考。
第一,看起来像findall
时,您正在使用match
。 它不会抓住封闭的大写re.findall('[AZ]{3}([az])(?=[AZ]{3})', search_string)
三元组,但是re.findall('[AZ]{3}([az])(?=[AZ]{3})', search_string)
将为您提供所有小写字母两侧各有3个盖帽。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.