如何在Regex.Replace的替换字符串中使用$符号?
在Regex.Replace替换字符串中使用$符号的正确方式
在.NET的Regex.Replace方法里,$是特殊符号,用来指代捕获组(比如$1表示第一个捕获组的内容)。如果要在最终结果里输出字面量的$,得用两个连续的$(也就是$$)来转义。
结合你的场景来看:
你输入的字符串是$5.,想要得到$5.00,但之前的尝试出了问题,核心原因是正则捕获组的范围和替换字符串的写法没配合好:
- 先看你第二段代码的结果
@5.00,说明你的正则捕获组只抓到了数字5,没包含开头的$。如果想保留原始的$并补全.00,可以调整正则,把$和数字分开捕获:
x = Regex.Replace(x, @"^(\$?)(\d{1,4})(\.?)", "$1$2.00");
这里:
$1引用第一个捕获组(也就是可选的$符号,有就保留,没有就空)$2引用第二个捕获组(数字部分)- 直接追加
.00,这样输入$5.就会变成$5.00。
- 如果一定要用你原来的正则,想要在结果里加
$,替换字符串得写成"$$$1.00":
x = Regex.Replace(x, @"(^\$?\d{0,4}\.?$)", "$$$1.00");
这里$$会被转义成一个字面量$,$1引用捕获组的内容(也就是5),最终就能得到$5.00。
简单总结:
- 输出字面量
$→ 写$$ - 引用捕获组 → 写
$1/$2等 - 两者结合时,顺序是
$$加$n,比如$$$1就表示$加捕获组1的内容。
内容的提问来源于stack exchange,提问作者user1604008
相关产品推荐
相关产品推荐

