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

如何使用Regex将减号前的所有零替换为@字符

用正则替换减号前的所有零为@的实现方案

这个需求用正则其实很好解决,我给你两种实用的方案,你可以根据自己使用的编程语言和场景来选:

方案一:全局匹配每个目标零直接替换

这种方案适合支持全局正则替换的语言,核心是精准定位减号之前的所有零,然后逐个替换成@。

正则表达式:

(?=[^-]*-)0

记得加上全局标志g(不同语言写法略有差异,比如Python的re.sub默认就是全局替换,JavaScript需要在正则末尾加/g)

正则含义:

  • (?=[^-]*-):这是正向预查,用来确保当前匹配的0后面一定存在减号-,且中间不会出现其他减号([^-]*匹配任意数量的非减号字符)
  • 0:就是我们要替换的目标零
  • 全局标志:保证把所有符合条件的零都找出来替换

代码示例(Python):

import re

test_cases = ["000-2.50", "00-12.50", "0-120.50", "0-0.00"]
for s in test_cases:
    result = re.sub(r'(?=[^-]*-)0', '@', s)
    print(f"{s} → {result}")

输出结果:

000-2.50 → @@@-2.50
00-12.50 → @@-12.50
0-120.50 → @-120.50
0-0.00 → @-0.00

方案二:捕获连续零串批量替换

如果你的语言支持替换时使用回调函数(比如JavaScript、Python等),这种方案更高效——只需要匹配一次,把减号前的所有连续零捕获,再替换成对应长度的@。

正则表达式:

^(0+)(-.*)$

正则含义:

  • ^:匹配字符串的开头
  • (0+):捕获一组连续的零(也就是减号前的所有零)
  • (-.*):捕获减号以及它后面的所有内容,保证这部分原封不动保留

代码示例(JavaScript):

const testCases = ["000-2.50", "00-12.50", "0-120.50", "0-0.00"];
testCases.forEach(str => {
  const result = str.replace(/^(0+)(-.*)$/g, (_, zerosPart, restPart) => {
    return '@'.repeat(zerosPart.length) + restPart;
  });
  console.log(`${str} → ${result}`);
});

输出结果和方案一完全一致。

两种方案都能完美满足你的需求,选哪种就看你更习惯哪种写法,或者你的语言更适配哪种方式啦~

内容的提问来源于stack exchange,提问作者Pat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:07:47