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

Java正则表达式需求:替换连续右括号但排除单引号前置场景

我来帮你解决这个正则表达式的问题!你当前的正则之所以不生效,主要有两个问题:一是它会把右括号前面的非单引号字符(比如a)))里的a)也一起替换掉,这不符合你的预期;二是没有正确处理单引号后面的右括号场景。

正确的思路是用负向后行断言,确保我们只匹配那些前面不是单引号的连续右括号。下面是你需要的正则表达式(以Java为例,因为你用了replaceAll方法):

String result = 输入字符串.replaceAll("(?<!')\\)+", ")");

来拆解一下这个正则的各个部分:

  • (?<!'):这是负向后行断言,它会检查当前匹配位置的前一个字符不是单引号。如果右括号前面是',那么这部分右括号就不会被匹配到。
  • \)+:匹配一个或多个连续的右括号。

我们用你的示例来验证:

  • 输入:a))) → 三个连续右括号前面是a(不是单引号),会被匹配并替换成单个) → 输出:a)(符合预期)
  • 输入:)))))) → 所有连续右括号前面都不是单引号,被替换成单个) → 输出:)(符合预期)
  • 输入:'))) → 第一个右括号前面是',所以整个连续的右括号都不会被匹配,保留原样 → 输出:')))(符合预期)

如果遇到混合场景比如a'))))),正则会保留单引号后面的所有右括号,最终结果是a'))))),完全符合你的需求。

内容的提问来源于stack exchange,提问作者Mario Mueller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:54:26