首页 > 解决方案 > replaceAll 方法正则表达式

问题描述

我的样本输入是 "0X10001,0X10002,0X610001,0X610002"

System.out.println(st.replaceAll(regex, "0"));

我的输出应该 "010001,010002,610001,610002"
0X替换为
0--> if length is 7
""--> if length is 8

我必须使用什么正则表达式?
([0X]){1,2}没有得到想要的输出。

标签: javaregexreplaceall

解决方案


像这样做:

String st = "0X10001,0X10002,0X610001,0X610002";
System.out.println(st.replaceAll("0X(?=\\d{6})|(0)X(?=\\d{5})", "$1"));

输出

010001,010002,610001,610002

解释

当正则表达式引擎扫描时,模式|总是先尝试左侧,然后再尝试右侧,因此随着它的前进,它会首先尝试0X(?=\\d{6}),这是一个匹配0X的 6 位数字(使用零宽度正向预测)。如果匹配,则不捕获任何内容,因此$1为空,并0X替换为空字符串。

如果不匹配,它会尝试(0)X(?=\\d{5}),即 match0X后跟 5 位数字。如果匹配,0则在组 1 中捕获 ,因此$10并由0X替换0

如果两者都不匹配,正则表达式引擎将在输入字符串的下一个位置重试。


推荐阅读