我目前在同一个字符串上运行大约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()])
我想知道是否有更紧凑和/或更优雅的方式来匹配多个正则表达式模式。也许是一个正则表达式对象的列表,但我不知道如果它甚至是一个选项,如何实现这样的东西。
答案 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]