擅长:python、mysql、java
<p>使用负先行(<code>(?<=...)</code>)确保符号前有一个数字,并使用单词边界断言(<code>\b</code>)捕获“km2”大小写:</p>
<pre><code>import re
expr = re.sub(r"(?<=\d)k\b", "e3", expr)
</code></pre>
<p>如果要避免多次执行此操作,请使用函数作为替换值:</p>
<pre><code>def sn_replace(match):
return scaling_factors[match.group(1)]
expr = re.sub(r"(?<=\d)(g|k|meg|m|u|n)\b", sn_replace, expr)
</code></pre>
<p>当<code>re.sub</code>的第二个参数是一个函数时,不会用文本替换匹配项,而是用match对象调用该函数,并将其返回值用作替换值。你知道吗</p>