擅长:python、mysql、java
<p>使用<code>lambda</code>中的<code>re.sub</code>可以执行以下操作:</p>
<pre><code>>>> import re
>>> s = 'SomeText +12 555 660 000 f00b4r abc123'
>>> reg = r'(\b\d*(?: +\d+)*)((?: *\d){})(?! *\d)'
>>>
>>> print re.sub(reg.format('{5}'), lambda m: m.group(1) + re.sub(r'\d', 'X', m.group(2)), s)
SomeText +12 555 6XX XXX f00b4r abc123
>>>
>>> print re.sub(reg.format('{2}'), lambda m: m.group(1) + re.sub(r'\d', 'X', m.group(2)), s)
SomeText +12 555 660 0XX f00b4r abc123
</code></pre>
<p><strong>详情:</strong></p>
<ul>
<li>第一个正则表达式<code>(\b\d*(?: +\d+)*)((?: *\d){5})(?! *\d)</code>匹配最后5个数字,这些数字前面有0或空格分隔的数字,后面没有可选的空格和数字。你知道吗</li>
<li>在<code>re.sub</code>中,我们使用lambda函数</li>
<li>在lambda函数体中,我们用字母<code>X</code>替换每个数字</li>
</ul>