擅长:python、mysql、java
<p>您可以使用<code>negative lookahead</code>执行此操作,如下所示:</p>
<pre><code>import re
with open('filename.txt') as fd:
data = fd.read()
regex = re.compile(
r'begin\s+FUNCTION\s+([a-zA-Z_]+)\s+'
r'(?:"[\d.]+\d\s+([a-zA-Z_]+)")?'
r'(?:(?:(?!/end\s+FUNCTION).)+FUNCTION_VERSION\s+"([\d.]+\d)")?',
re.MULTILINE | re.DOTALL
)
result = {i[0]: [i[2], i[1]] for i in regex.findall(data)}
print(result)
#outpout
{'urbi': ['10.15.3', 'urbi_long'], 'foo': ['1.2.0', 'foo_long'], 'bar': ['', '']}
#refine result
result = {k: [i for i in v if i] for k, v in result.items()}
print(result)
# output
{'urbi': ['10.15.3', 'urbi_long'], 'foo': ['1.2.0', 'foo_long'], 'bar': []}
</code></pre>