擅长:python、mysql、java
<p>C Panda的答案是好的,但不明显的是,一个充满<code>|</code>的正则表达式是尝试所有正则表达式的最快方法。测试此替代方案的性能:</p>
<pre><code>pats = [re.compile(date_string+pat) for conf in Conf.values() for pat in conf]
with open('file.txt') as log:
for line in log:
if any(pat.match(line) for pat in pats):
print(line.strip())
</code></pre>
<p>另一方面,这里介绍了如何使用干净的<code>break</code>编写当前代码,而不需要<code>flag</code>:</p>
<pre><code>for ConfLine, patterns in ((c, p) for c in Conf.values() for p in c):
patterns = DateString + patterns
if re.match(patterns, LogLine):
break
else:
print LogLine.strip()
</code></pre>