Java正则Replace问题:如何保留可变前缀替换数字后缀?
解决正则替换保留前缀的问题
嘿,问题出在你写的正则表达式上!(?<=(:|)).*$ 这个规则会匹配从字符串开头到结尾的所有内容——因为(:|)允许匹配空字符(也就是字符串的起始位置),所以不管输入有没有execute:前缀,整个字符串都会被替换成00000,这就是前缀消失的原因。
简单有效的解决方案
我们只需要精准匹配字符串末尾的数字部分,然后替换成00000就可以了。修改正则为\d+$,它的作用是:
- 对于带前缀的输入(比如
execute:13457689),只会匹配冒号后面的数字串13457689,替换后自然保留前面的前缀; - 对于纯数字输入(比如
74859374),会匹配整个字符串,替换后得到00000。
修改后的Java代码如下:
public static void main(String... args) { replace("execute:13457689"); replace("74859374"); } private static void replace(String text) { System.out.print("input: " + text + ", "); // 匹配末尾的连续数字并替换为00000 System.out.print("result: " + text.replaceFirst("\\d+$", "00000")); System.out.println(); }
执行结果
运行这段代码后,就能得到你期望的输出:
input: execute:13457689, result: execute:00000
input: 74859374, result: 00000
适配未来前缀变更
这个方案完全不用担心execute一词未来变更——不管前缀是abc:、xyz:还是其他任何格式的[前缀]:[数字],都会自动保留前缀并替换后面的数字部分,纯数字的情况也能正常处理。
内容的提问来源于stack exchange,提问作者Thomas Rogger
相关产品推荐
相关产品推荐

