У меня довольно большая строка (~ 700k), для которой мне нужно запустить 10 регулярных выражений и подсчитать все совпадения любого из регулярных выражений. Моим быстрым и грязным подтекстом было сделать что-то вроде re.search ('(expr1) | (expr2) | ...'), но мне было интересно, увидим ли мы прирост производительности при сравнении в цикле:
Другими словами, я хочу сравнить производительность:
def CountMatchesInBigstring(bigstring, my_regexes):
"""Counts how many of the expressions in my_regexes match bigstring."""
count = 0
combined_expr = '|'.join(['(%s)' % r for r in my_regexes])
matches = re.search(combined_expr, bigstring)
if matches:
count += NumMatches(matches)
return count
против
def CountMatchesInBigstring(bigstring, my_regexes):
"""Counts how many of the expressions in my_regexes match bigstring."""
count = 0
for reg in my_regexes:
matches = re.search(reg, bigstring)
if matches:
count += NumMatches(matches)
return count
Я перестану лениться и завтра проведу некоторые тесты (и опубликую результаты), но мне было интересно, выскакивает ли ответ тот, кто действительно понимает, как работают регулярные выражения:)