You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写正则表达式移除多余前导零并保留单独存在的零

解决方案

你原有正则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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:15:00