java正则去除括号内的字符串?

新手上路,请多包涵

输入:我一直(一直一直)在这里
输出:我一直在这里

输入:我一直(一直(永远)一直)在这里
输出:我一直在这里

输入:我一直(一直(永远)一直)在这(一直一直)里(一直一直)
输出:我一直在这里

阅读 3.4k
4 个回答

括号匹配, 正则并不擅长.

我建用代码循环找.
做个变量标记
找到左括号, 变量+1, 找到右括号变量-1, 把变量等于0的位置中间的全删除.

regex101 看了下 java 8 支持的正则特性

但很遗憾,不支持递归匹配或平衡组等特性

所以,不可能(一次)正则,就能匹配/替换/去除数量不确定的括号对的

java 中的正则,不支持一次性去除嵌套括号。

可以通过判断是否还存在括号的方式去除。

public class Test {
    public static void main(String[] args) {
        String s = "我一直(一直(永远)一直)在这(一直一直)里(一直一直)";
        while (s.contains("(")) {
            s = s.replaceAll("\\([^()]*\\)", "");
        }
        System.out.println(s);
    }
}

正则比较麻烦,不会java, 写个js的, 采用计数的方法,遇到(就-1,遇到)就+1,只取等于0的字符

const deal = (str) => {
  let r = '';
  let count = 0;

  for (const val of str) {
    if (val === '(') {
      count -=1;
    }
    if(val === ')'){
      count +=1;
    }
    if (count === 0 && val !== ')') {
      r+=val
    }
  }
  return r
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题