擅长:python、mysql、java
<p>您可以考虑安装优秀的<a href="https://pypi.org/project/regex/" rel="nofollow noreferrer">^{<cd1>}</a>模块,该模块支持许多高级regex功能,包括<a href="https://www.regular-expressions.info/branchreset.html" rel="nofollow noreferrer">branch reset groups</a>,旨在准确解决您在本问题中概述的问题。分支重置组用<code>(?|...)</code>表示。在一个分支重置组中,具有相同位置或名称的不同替代模式的所有捕获组共享相同的捕获组以进行输出。在</p>
<p>请注意,在下面的示例中,匹配的捕获组将成为命名的捕获组,因此您不需要迭代多个组来搜索非空组:</p>
<pre><code>import regex
ip_pattern = r'(?P<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'
patterns = [
'Registration from {ip} - Wrong password',
'Call from {ip} rejected because extension not found'
]
pattern = regex.compile('(?|%s)' % '|'.join(patterns).format(ip=ip_pattern))
for line in sys.stdin:
match = regex.search(pattern, line)
if match:
print(match['ip'])
</code></pre>
<p>演示:<a href="https://repl.it/@blhsing/RegularEmbellishedBugs" rel="nofollow noreferrer">https://repl.it/@blhsing/RegularEmbellishedBugs</a></p>