<p>您可以使用内置的regex模块(<code>re</code>)和以下模式一起有效地替换字符串中的内容</p>
<p><strong>模式</strong></p>
<pre><code>'(?<=BH)[A-Z]+\.M'
</code></pre>
<p>此模式向后查找(不匹配)以确保检查子字符串<code>'BH'</code>,然后在任何大写字符<code>[A-Z]</code>上匹配一次或多次<code>+</code>,然后再匹配子字符串<code>'.M'</code></p>
<p><strong>解决方案</strong></p>
<p>下面的解决方案在上面概述的模式旁边使用<code>re.sub()</code>返回一个字符串,其中子字符串与替换为此处定义为<code>replacement</code>的模式匹配</p>
<pre class="lang-py prettyprint-override"><code>import re
original = 'II.NIL.10.BHB.M.2078.198.160857'
replacement = 'FG'
output = re.sub(r'(?<=BH)[A-Z]+\.M', replacement, original)
print(output)
</code></pre>
<p><strong>输出</strong></p>
<pre><code>II.NIL.10.BHFG.2078.198.160857
</code></pre>
<p><strong>处理多个文件</strong></p>
<p>要对多个文件重复此过程,可以在循环/理解中应用上述逻辑,在每个<code>original</code>/<code>replacement</code>配对上运行<code>re.sub()</code>函数,并适当地存储/处理</p>
<p>下面的示例使用原始问题中的数据以及上述逻辑,通过原始文件名和使用<code>re.sub()</code>插入的子字符串之间的字典映射,创建包含每个<code>re.sub()</code>操作结果的列表</p>
<pre class="lang-py prettyprint-override"><code>import re
originals = [
'II.NIL.10.BHZ.M.2058.190.160877',
'II.NIL.10.BHA.M.2008.190.168857',
'II.NIL.10.BHB.M.2078.198.160857'
]
replacements = ['T','D','FG']
mapping = {originals[i]: replacements[i] for i, _ in enumerate(originals)}
results = [re.sub(r'(?<=BH)[A-Z]+\.M', v, k) for k,v in mapping.items()]
for r in results:
print(r)
</code></pre>
<p><strong>输出</strong></p>
<pre><code>II.NIL.10.BHT.2058.190.160877
II.NIL.10.BHD.2008.190.168857
II.NIL.10.BHFG.2078.198.160857
</code></pre>