更紧凑和/或更优雅的方式来运行多个正则表达式匹配

时间:2013-12-30 01:29:54

标签: python regex

我目前在同一个字符串上运行大约100个不同的正则表达式模式匹配调用,并将结果添加到列表中。

缩短的例子:

text = "String to Search"
matches = []

AC1 = re.compile(r'(?:TGA[GA])+')
for m in AC1.finditer(text):
    matches.append([m.start(), m.end(), "AC1", m.group()])

polyAT = re.compile(r'[AT]{6,}')
for m in polyAT.finditer(text):
    matches.append([m.start(), m.end(), "polyAT", m.group()])

我想知道是否有更紧凑和/或更优雅的方式来匹配多个正则表达式模式。也许是一个正则表达式对象的列表,但我不知道如果它甚至是一个选项,如何实现这样的东西。

1 个答案:

答案 0 :(得分:1)

您可以制作一个列表,例如

mypats = [("AC1", AC1), ("polyAT", polyAT), ... as many as you like]

然后在顶层循环:

for patname, pat in mypats:
    for m in pat.finditer(text):
        matches.append([m.start(), m.end(), patname, m.group()])

要获得额外的功劳;-),也可以通过以下方式构建regexp对象:

myregexps = [('AC1', r'(?:TGA[GA])+'), # list of (patname, regexp) pairs
             ('polyAT', r'[AT]{6,}'),
             ...
            ]

mypats = [(patname, re.compile(raw)) for patname, raw in myregexps]