替换部分字符串的正确方法是什么,匹配某些条件,例如,如果我有这个文本:
"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))"
,
第一个开口支架将被移除,而不是第三个。
答案 0 :(得分:1)
这样的事情怎么样:
String s = "some_text1((some_text2) and 1)some_text3";
System.out.println(s.replaceAll("\\(.*?(\\(.*?\\)).*?\\)", "$1"));
这匹配嵌套括号并将内括号放在匹配组1中,然后在替换字符串中使用,有效地丢弃外括号(及其内容)。
毋庸置疑,如果some_text1
或some_text3
包含括号,那么事情就会出错。