0

我有一个多个正则表达式,它结合了数千个不同的正则表达式,例如r"reg1|reg2|...".

我想知道其中一个正则表达式匹配re.search(r"reg1|reg2|...", text),我不知道该怎么做,因为`re.search(r"reg1|reg2|...", text).re.pattern给出了整个正则表达式。

例如,如果我的正则表达式是r"foo[0-9]|bar", my pattern "foo1",我想得到一个 answer "foo[0-9]

有没有办法做到这一点?

4

2 回答 2

0

将每个子正则表达式包装在(). 匹配后,您可以遍历匹配器 ( match.group(index)) 中的所有组。非空组将是匹配的组。

于 2013-10-18T09:12:57.303 回答
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用于在找到匹配项后立即停止尝试匹配。

于 2013-10-19T20:12:47.697 回答