如何编写正则表达式移除多余前导零并保留单独存在的零
解决方案
你原有正则r'^[0]*'的问题是会无差别删除所有开头的零,会导致0变成空字符串、0.1变成.1,不符合保留单独零的要求。
适配你需求的正则表达式如下,直接用捕获组替换即可实现效果:
r'^(-?)0*(0$|0\.\d+|[1-9]\d*\.?\d*)$'
替换模板为\1\2。
正则逻辑说明
^匹配字符串开头(-?)捕获可选的负号存入分组1,保留数字的正负属性0*匹配所有多余的前导零,这部分会在替换时被丢弃- 分组2捕获符合要求的合法数字部分:
0$匹配单独存在的0,直接保留0\.\d+匹配整数部分仅为单个0的小数,保留整数位的0[1-9]\d*\.?\d*匹配整数部分以非零数字开头的整数/小数,自动过滤掉前面的多余零
- 最终替换为
\1\2,即拼接负号和合法数字部分即可。
使用示例(Python)
import re def remove_leading_zeros(num_str): pattern = r'^(-?)0*(0$|0\.\d+|[1-9]\d*\.?\d*)$' return re.sub(pattern, r'\1\2', num_str) # 测试你的场景 test_cases = ['0', '0.1', '-0.1', '00.01', '001'] for case in test_cases: print(f"{case} -> {remove_leading_zeros(case)}")
运行输出完全符合你的预期:
0 -> 0 0.1 -> 0.1 -0.1 -> -0.1 00.01 -> 0.01 001 -> 1
内容的提问来源于stack exchange,提问作者user2896120
相关产品推荐
相关产品推荐

