Skip to main content
 首页 » 编程设计

python之使用 Python 匹配一个对象和一个特定的正则表达式

2025年05月04日24dudu

给定一个文本,我需要检查每个字符是否完全(编辑)两边都有 3 个大写字母,如果有,则将其添加到返回的此类字符的字符串中.

我写了以下内容:m = re.match("[A-Z]{3}.[A-Z]{3}", text) (假设文本 =“AAAbAAAcAAA”)

我希望在匹配对象中得到两个组:“AAAbAAA”和“AAAcAAA”

现在,当我调用 m.group(0) 时,我得到正确的“AAAbAAA”。然而,当调用 m.group(1) 时,我发现没有这样的组,这意味着“AAAcAAA”不匹配。为什么?

此外,在调用 m.groups() 时,我得到一个空元组,尽管我应该得到一个匹配的元组,这意味着在我的情况下我应该得到一个带有“AAAbAAA”的元组.为什么那行不通?

请您参考如下方法:

您的模式中没有任何组。要捕获组中的某些内容,您必须用括号将其括起来:

([A-Z]{3}).[A-Z]{3} 

异常(exception)是 m.group(0),它将始终包含整个匹配项。

查看您的问题,听起来您实际上并不是在寻找捕获组,而是在寻找重叠匹配项。在正则表达式中,组表示匹配中留出供以后使用的较小部分。例如,如果您尝试将电话号码与类似

的内容进行匹配
([0-9]{3})-([0-9]{3}-[0-9]{4}) 

那么区号将在 group(1) 中,本地部分在 group(2) 中,整个代码将在 group( 0)。

您想要的是找到重叠的匹配项。 这是一个解释 how to do overlapping matches in Python regex 的 Stack Overflow 答案, 这是我最喜欢的 reference for capture groups and regex in general.