Skip to main content
 首页 » 编程设计

python之用正则表达式有条件地替换数字

2024年08月20日36落叶无声

输入:

foobar10000foobar 
foobar1000foobar 
foobar100foobar 
foobar10foobar 
foobarfoobar 

期望的输出:

foobar4foobar 
foobar3foobar 
foobar2foobar 
foobar1foobar 
foobar0foobar 

换句话说,替换应该是匹配数字中包含的零的数量。这些示例已经包含所有可能的数字:{none, 10, 100, 1000, 10000} 。

有没有办法用一个正则表达式语句来做到这一点?

(附带信息:我想为 Sublime Text 3 的 RegReplace 包实现一个规则)

请您参考如下方法:

你可以,因为 re.sub 接受一个函数作为替换。参见 re.sub

替换函数接受一个匹配对象作为参数,并且必须返回一个字符串。

import re 
texts = ['foobar10000foobar', 'foobar100foobar', 
         'foobar1foobar', 'foobarfoobar'] 
 
def zeros_count(matchobj): 
     return str(matchobj.group(0).count('0')) 
 
def replace_zeros(text): 
    return re.sub(r'\d+', zeros_count, text) 
 
for text in texts: 
    print(text, '-->', replace_zeros(text)) 
 
# foobar10000foobar --> foobar4foobar 
# foobar100foobar --> foobar2foobar 
# foobar1foobar --> foobar0foobar 
# foobarfoobar --> foobarfoobar 

请注意,在最后一种情况下,没有要替换的数字,因此没有逻辑位置可以插入 0,就像您最后想要的输出一样。