You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 07:36:22