擅长:python、mysql、java
<p>我修改了您的基本模式,在末尾包含空格,并为<code>pic</code>创建了一个不同的模式</p>
<pre><code>pat2 = r'(?P<level>\d{2})\s+(?P<name>\S+)\s+'
picpat = r'PIC\s(?P<pic>[^.\s]+)'
</code></pre>
<p><code>picpat</code>匹配<code>'PIC '</code>之后的任何内容,直到它变成一个点或空白</p>
<p><img src="https://www.debuggex.com/i/ad08UltneA-8hYS-.png" alt="Regular expression visualization"/></p>
<p>我使用一个f字符串将函数稍作修改,将其与<em>pic模式</em>相结合,在匹配项上而不是行上进行迭代</p>
<pre><code>def get_pics(data,pic):
pat2 = r'(?P<level>\d{2})\s+(?P<name>\S+)\s+'
pattern = f'{pat2}{pic}'
#pattern = '{}{}'.format(pat2,pic)
pattern = re.compile(pattern)
for match in pattern.finditer(data):
print(match.groupdict())
>>> get_pics(data,picpat)
{'level': '12', 'name': 'M-AR03-MONTANT-RDJ', 'pic': 'S9(17)'}
{'level': '12', 'name': 'M-AR03-COMPTE-RDJ', 'pic': 'X(8)'}
{'level': '09', 'name': 'M-N014-INC-CHARG-AMT-FSOL', 'pic': 'S9(9)V9(2)'}
{'level': '09', 'name': 'M-N014-CHARGE-TYPE-FSOL', 'pic': 'X(5)'}
>>>
</code></pre>