【发布时间】:2009-07-16 15:49:34
【问题描述】:
我有一个字符串:
HLN (Formerly Headline News)
我想删除括号内的所有内容和括号本身,只留下:
HLN
我尝试使用正则表达式来做到这一点,但我的困难在于这种模式:
"(.+?)"
当我使用它时,它总是给我一个PatternSyntaxException。如何修复我的正则表达式?
【问题讨论】:
我有一个字符串:
HLN (Formerly Headline News)
我想删除括号内的所有内容和括号本身,只留下:
HLN
我尝试使用正则表达式来做到这一点,但我的困难在于这种模式:
"(.+?)"
当我使用它时,它总是给我一个PatternSyntaxException。如何修复我的正则表达式?
【问题讨论】:
String foo = "(x)()foo(x)()";
String cleanFoo = foo.replaceAll("\\([^\\(]*\\)", "");
// cleanFoo value will be "foo"
上面删除了字符串两边的空括号和非空括号。
普通正则表达式:
\([^\(]*\)
你可以在这里测试:http://www.regexplanet.com/simple/index.html
我的代码是基于以前的答案
【讨论】:
您可以使用以下正则表达式来查找括号:
\([^)]*\)
\( 匹配左括号,[^)]* 匹配除右括号外的任意数量的字符,\) 匹配右括号。
如果您将其包含在 java 字符串中,则必须转义 \ 字符,如下所示:
String regex = "\\([^)]*\\)";
【讨论】:
因为括号是正则表达式中的特殊字符,您需要对它们进行转义以明确匹配它们。
例如:
"\\(.+?\\)"
【讨论】:
String foo = "bar (baz)";
String boz = foo.replaceAll("\\(.+\\)", ""); // or replaceFirst
boz 现在是 "bar "
【讨论】: