找出多个正则表达式的哪一部分匹配

时间:2013-10-18 09:10:59

标签: python regex python-2.7

我有一个多重正则表达式,它结合了数千种不同的正则表达式,例如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]

有没有办法做到这一点?

2 个答案:

答案 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

之后,如果未找到匹配项,则matchmatching_reg都将为None。如果找到匹配项,则match将包含正则表达式结果,而matching_reg将包含来自regs的匹配的正则表达式搜索字符串。

请注意break用于在找到匹配后立即停止尝试匹配。