我有一个多重正则表达式,它结合了数千种不同的正则表达式,例如r"reg1|reg2|..."
。
我想知道哪个正则表达式在re.search(r"reg1|reg2|...", text)
中匹配,而我无法知道如何执行此操作,因为`re.search(r"reg1|reg2|...", text).re.pattern
给出了整个正则表达式。
例如,如果我的正则表达式是r"foo[0-9]|bar"
,我的模式"foo1"
,我想得到答案"foo[0-9]
。
有没有办法做到这一点?
答案 0 :(得分:0)
在()
中包装每个子正则表达式。匹配后,您可以浏览匹配器中的所有组(match.group(index)
)。非空组将是匹配的组。
答案 1 :(得分:0)
您可以将每个可能的正则表达式放入一个列表中,然后将它们串联检查,因为这比一个非常大的正则表达式更快,并且允许您根据需要确定哪个匹配:
mystring = "Some string you're searching in."
regs = ['reg1', 'reg2', 'reg3', ...]
matching_reg = None
for reg in regs:
match = re.search(reg, mystring)
if match:
matching_reg = reg
break
之后,如果未找到匹配项,则match
和matching_reg
都将为None
。如果找到匹配项,则match
将包含正则表达式结果,而matching_reg
将包含来自regs
的匹配的正则表达式搜索字符串。
请注意break
用于在找到匹配后立即停止尝试匹配。