替换Java

时间:2015-10-03 22:06:18

标签: java regex string

替换部分字符串的正确方法是什么,匹配某些条件,例如,如果我有这个文本:

"some_text1((some_text2) and 1)some_text3"

我想将其转换为:

"some_text1(some_text2)some_text3"

在此示例中,标准为:如果有( ... and 1),我想将其替换为...(某些文字,我不知道它是什么)。

编辑: 根据答案,我写了这个函数:

static String replaceRecursive(String str, String pattern, String matcher) {
    String res = str.replaceAll(pattern, matcher);
    if (res == str) {
        return res;
    }
    return replaceRecursive(res, pattern, matcher);
}

用法:

String str = "((((X and 1) and Y) and 1) or Z)";

System.out.println(replaceRecursive(str, "\\((.*) and 1\\)", "$1"));

似乎正在运作

更新 它仍然无法正常工作。括号内有问题。 例如,如果 str = "((some_text1)((some_text2) and 1))", 第一个开口支架将被移除,而不是第三个。

1 个答案:

答案 0 :(得分:1)

这样的事情怎么样:

String s = "some_text1((some_text2) and 1)some_text3";
System.out.println(s.replaceAll("\\(.*?(\\(.*?\\)).*?\\)", "$1"));

这匹配嵌套括号并将内括号放在匹配组1中,然后在替换字符串中使用,有效地丢弃外括号(及其内容)。

毋庸置疑,如果some_text1some_text3包含括号,那么事情就会出错。