Java使用replaceAll正则提取字符串时结果末尾多余连字符如何解决
问题根因
输出末尾多连字符是正则匹配逻辑偏差导致的:
- 正则中分隔符仅匹配单个
-,但测试字符串里xyxpt和1之间是连续两个-,中间夹了长度为0的空段;分组使用的[^-]+要求至少匹配1个非-字符,无法识别这个空段。 - 中间分组的
(.+)是贪婪匹配模式,会尽可能向后匹配字符,最终把xyxpt后的第一个-纳入第三组$3的范围,仅将最后两个非空段1、cnaq9匹配为第四、第五组,导致第三组末尾多出连字符。
修复代码
把正则里匹配分隔符的-替换为-+(匹配1个及以上连续-,自动跳过连续连字符中间的空段),加上行首^、行尾$锚定避免意外匹配即可:
final String label = "abcs-xyzed-abc-nyd-request-xyxpt--1-cnaq9"; System.out.println(label.replaceAll( "^([^-]+)-+([^-]+)-+(.+)-+([^-]+)-+([^-]+)$", "$3"));
运行后输出为期望结果:
abc-nyd-request-xyxpt
内容的提问来源于stack exchange,提问作者rishi
相关产品推荐
相关产品推荐

