首页 > 解决方案 > 遍历正则表达式中字符串匹配的每个组名

问题描述

类似于问题如何捕获多个重复组?,或如何迭代正则表达式的匹配组,但如果它略有不同,我似乎无法绕开我的头。似乎大多数人想要循环遍历字符串中匹配的实例,而不是循环遍历字符串匹配的组。

我有一个已编译的正则表达式,其中包含多个组 - 每个组之间都有一个 OR。我的正则表达式如下所示:

self.combined_re = re.compile('|(?P<a0>/T/R/E/Relation)|(?P<a1>/T/R/E/Relation)|(?P<a2>/T/R/E/Relation/Orig)|(?P<a3>/T/R/E/Relation)|(?P<a4>/T/R/E/Relation/Related)|(?P<a5>/T/R/E/Relation/Role)|(?P<a6>/T/R/E/Relation/Volume)')

注意上面是一个例子——我的正则表达式是动态创建的,但这只是一个例子。为了简单起见,它是一个稍微更明显的正则表达式,只有精确的字符串。

如果我跑

match_object = self.combined_re.fullmatch("/T/R/E/Relation")

您可以看到组 a0、a1 和 a3 都将匹配这个字符串...

我怎样才能循环浏览这 3 个组(不知道他们会是匹配的组)?丑陋的伪代码尝试展示我如何使用它的示例:

for each matched group in match_object:
 if matched group = a0:
   do a0 stuff
 elsif matched group = a1:
   do a1 stuff
 ...
 elsif matched group = a6:
   do a6 suff

我目前正在使用

match_object.lastgroup

打电话,但这当然只是给了我一组,而我失去了其他组。有没有办法用匹配对象做到这一点?我真的不想改变我的重新..希望这可以用我缺少的一些匹配对象来完成..谢谢!

标签: pythonre

解决方案


似乎不可能有一个包含多个组的正则表达式并强制匹配告诉您与字符串匹配的所有组。使用 | 组之间不是贪婪的,所以一旦第一组匹配它就会停止。没有 |,组必须都满足字符串。

所以对我来说唯一的选择是将我所有的组分成单独的正则表达式并单独执行。

如果你知道另一种方式,请告诉我。


推荐阅读