擅长:python、mysql、java
<p><code>re.findall()</code>在找不到匹配项时返回一个空列表(<code>[]</code>),因此不需要空回退。如果您想在找不到术语时使用<code>None</code>,如Brennan所说,则使用<code>findall(string) or None</code>。你知道吗</p>
<p>考虑使用列表理解来循环所有条目,而dict理解则将regex模式应用于同一条目并将结果保存在dict中</p>
<pre><code>import re
terms = (["runtime", re.compile("runtime\s?:\s?(\d+)")],
["ctime", re.compile("ctime\s?:\s?(\d+)")],
["scan", re.compile("scan\s?:\s?(\d+)")])
results = [{property: pattern.findall(entry) for property, pattern in terms} for entry in entries]
</code></pre>
<p>现在你有了这样的东西:</p>
<pre><code>[{"runtime": None, "scan": ###, "ctime": ###}, {"runtime": ###, "scan": ###, "ctime": ###}, {"runtime": ###, "scan": None, "ctime": None}, ...]
</code></pre>
<p>上述代码相当于(但性能更高):</p>
<pre><code>results = []
for entry in entries:
entry_dict = {}
for term, regex_pattern in terms:
entry_dict[term] = regex_pattern.findall(entry) or None
results.append(entry_dict)
</code></pre>