<p><strong>使用替换字符串:</strong></p>
<p>一种稍微优雅一点的方式。这一班轮:</p>
<pre><code>re.sub(rf"({'|'.join(changewords)}) \n", r"\1:", string, flags=re.I)
</code></pre>
<p>演示:</p>
<pre><code>>>> string = "Foo \n value of something \n Bar \n Another value \n"
>>> changewords = ['Foo', 'Bar', 'Baz', 'qux']
>>>
>>> re.sub(rf"({'|'.join(changewords)}) \n", r"\1:", string, flags=re.I)
'Foo: value of something \n Bar: Another value \n'
>>>
</code></pre>
<p>您可以使用<code>flags</code>选项指定不区分大小写的匹配。可以修改替换字符串,使其具有<code>\1</code>左右所需的任何内容,如冒号或逗号</p>
<p>值得注意的是,在Python中,可以在字符串上放置多个说明符。例如,您可以同时使用<code>r</code>和<code>f</code>,比如<code>rf"my raw formatted string"</code>-说明符的顺序并不重要</p>
<p>在<code>re.sub(expr, repl, string)</code>中的表达式中,可以指定组。分组是通过在文本周围放置括号<code>()</code>来完成的</p>
<p>然后,可以使用反斜杠及其出现次数在替换字符串<code>repl</code>中引用组-第一个组由<code>\1</code>引用</p>
<p>函数<code>re.sub()</code>将替换字符串中的<code>\1</code>与表达式参数中的第一个组<code>(A|B|C)</code>相关联</p>
<p><strong>使用替换功能:</strong></p>
<p>假设要用字典中的其他单词替换目标字符串中的单词。例如,您希望将“Bar”替换为“Hank”,将“Foo”替换为“Bernard”。这可以使用替换函数而不是替换字符串来完成:</p>
<pre><code>>>> repl_dict = {'Foo':'Bernard', 'Bar':'Hank'}
>>>
>>> expr = rf"({'|'.join(repl_dict.keys())}) \n" # Becomes '(Foo|Bar) \\n'
>>>
>>> func = lambda mo: f"{repl_dict[mo.group(1)]}:"
>>>
>>> re.sub(expr, func, string, flags=re.I)
'Bernard: value of something \n Hank: Another value \n'
>>>
</code></pre>
<p>这可能是另一个一行,但为了清楚起见我把它拆开了</p>
<p>lambda函数的作用是获取传递给它的匹配对象<code>mo</code>,然后提取第一个组的文本。reg表达式中的第一个组是由<code>()</code>包围的文本,类似于<code>(A|B|C)</code></p>
<p>替换函数使用<code>mo.group(1)</code>引用第一个组;类似地,在上一个示例中,替换字符串通过<code>\1</code>引用它</p>
<p>然后repl函数在dict中进行查找,并返回匹配的最终替换字符串</p>