擅长:python、mysql、java
<p>因为它应该取代整个模式的出现:</p>
<blockquote>
<p>Return the string obtained by replacing the leftmost non-overlapping occurrences of the pattern in string by the replacement repl.</p>
</blockquote>
<p>如果它只替换某些子组,那么包含多个组的复杂正则表达式将不起作用。有几种可能的解决方案:</p>
<ol>
<li>完全指定模式:<code>re.sub('ab', 'ad', 'abc')</code>-我的最爱,因为它非常可读和明确。</li>
<li>捕获要保留的组,然后在模式中引用它们(注意,应该是原始字符串以避免转义):<code>re.sub('(a)b', r'\1d', 'abc')</code></li>
<li>类似于前面的选项:提供一个回调函数作为<code>repl</code>参数,并使其处理<code>Match</code>对象并返回所需的结果。</li>
<li>使用lookbehinds/lookaheds,它不包含在匹配中,但会影响匹配:<code>re.sub('(?<=a)b', r'd', 'abxb')</code>产生<code>adxb</code>。小组开头的<code>?<=</code>说“这是一个展望”。</li>
</ol>