【发布时间】:2020-01-02 20:26:12
【问题描述】:
我正在寻找 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,但没有任何帮助。
下面是我试过的
"\\<[^\\>]*?\\)"
"\\<|\\>"
提前致谢!!!
【问题讨论】:
-
如果您有
some <angle <brackets>作为输入,那么输出应该是什么:some <angle brackets或some angle <brackets? -
Java 正则表达式不支持递归模式,最好使用解析器。
-
@NickReed,OP 似乎在谈论平衡良好的括号,但不确定(尽管有评论)。
-
我个人喜欢这里的
appendReplacement() and appendTail()答案stackoverflow.com/questions/375420/…,但任何回调方式都可以。每次匹配,从组 0 中删除所有<或>,然后附加(或替换)到新字符串。正则表达式:"(?s)(?=<)(?:(?=.*?<(?!.*?\\1)(.*>(?!.*\\2).*))(?=.*?>(?!.*?\\2)(.*)).)+?.*?(?=\\1)[^<]*(?=\\2$)"regex101.com/r/mbdquf/1 请注意,每个匹配项都保证有平衡的尖括号。