擅长:python、mysql、java
<p><code>re</code>模块的<a href="https://docs.python.org/2/library/re.html#re.sub" rel="nofollow">^{<cd2>}</a>函数完成了<code>str.replace</code>所做的工作,但功能要多得多。特别是,它提供了传递替换函数而不是字符串的能力。对于每个匹配调用一次函数,并将匹配对象作为参数,并且必须返回将替换匹配项的字符串:</p>
<pre><code>import re
pattern = re.sub('noun', lambda match: getRandomLine('noun.txt'), pattern)
</code></pre>
<p>这里的好处是增加了灵活性。缺点是,如果您不知道regex,那么替换者将<code>'noun'</code>解释为regex这一事实可能会引起意外。例如</p>
^{pr2}$
<p>如果您不知道regex,您可能需要使用<code>re.escape</code>来创建一个与要搜索的原始文本匹配的regex,即使文本包含regex元字符:</p>
<pre><code>>>> re.sub(re.escape('Aw, man...'), 'Match found.', 'Aw, manatee.')
'Aw, manatee.'
</code></pre>