我正在寻找Java中的正则表达式,如果字符串中同时存在尖括号,则可以删除它们。
例如1个
str = "abc <someting> def < 0"
output: "abc someting def < 0"
如果打开或关闭,则该支撑应保持原样。
例如2
str = "abc <some <thing>> def < 0"
output : "abc some thing def < 0"
我遵循了其他stackoverflow QA,但没有任何帮助。
以下是我尝试过的
"\\<[^\\>]*?\\)"
"\\<|\\>"
提前致谢!!!
最佳答案
您可以执行循环的regexp替换,直到不做任何更改。我以为您是在谈论括号括起来的无括号文本。在这种情况下,正则表达式为<([^>]*)>
,它捕获第一组中的内部文本(名为$1
)。
在下面的示例中,一条while
循环行检查str
的值是否与str.replaceAll()
的结果不同,该结果在检查之后分配给str
。如果它们相等,则循环结束,即,替换时什么也没有,因此没有要删除的括号。
public class Test {
public static void main(String args[]) {
String str = "abc <some <thing>> def < 0";
while (!str.equals(str = str.replaceAll("<([^>]*)>", "$1")));
System.out.println(str);
}
}
输出:
~$ javac Test.java
~$ java Test
abc some thing def < 0
str.equals()
的1个目标引用是before参数评估,因此在分配之前。