擅长:python、mysql、java
<p>正如您所指出的,您需要解决这样一个事实:捕获组只捕获最后一个匹配项。一种方法是利用文件中的行是iterable这一事实,并使用两种模式:一种用于“line name”,另一种用于其多个keyvalue对:*</p>
<pre><code>import re
dname = re.compile(r'^&{(?P<name>\w+)}=')
keyval = re.compile(r'(?P<key>\w+)=(?P<val>\w+)')
data = {}
with open('input/keyvals.txt') as f:
for line in f:
name = dname.search(line)
if name:
name = name.group('name')
data[name] = dict(keyval.findall(line))
</code></pre>
<p><sub>*诚然,这有点低效,因为每行执行两次搜索。但对于中等大小的文件,应该没问题。</sub></p>
<p>结果:</p>
^{pr2}$
<p>请注意,<code>\w</code>匹配Unicode单词字符。在</p>
<hr/>
<p>样本输入,keyvals.txt公司名称:</p>
^{3}$