我正在寻找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参数评估,因此在分配之前。

09-10 09:36
查看更多