java - 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}
没有得到想要的输出。
解决方案
像这样做:
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 中捕获 ,因此$1
,0
并由0X
替换0
。
如果两者都不匹配,正则表达式引擎将在输入字符串的下一个位置重试。
推荐阅读
- google-play-console - 现在是否必须使用 Google Play Signing for Instant Apps?
- azure-devops - OpenShift rollout 部署带有标签的镜像
- python - 需要在特定位置的 Python 配置文件
- python - 如何从大型数据框中获取样本数据集,同时保持列中分类变量的比例
- python - Python 中的 JSON 解析 - 帮助在列表中提取字典
- amazon-web-services - AWS Amplify Graph API 为“createdAt”字段设置了错误的默认时间
- .net-core - EF Core 嵌套实体处理
- sql - 列出 postgresql 数据库中所有表的表大小
- c# - 如何根据一些布尔表达式更改引导列?
- delphi - Socket Error #10054 Connection reset by peer