【问题标题】:How can I replace a string in parentheses using a regex?如何使用正则表达式替换括号中的字符串?
【发布时间】:2009-07-16 15:49:34
【问题描述】:

我有一个字符串:

HLN (Formerly Headline News)

我想删除括号内的所有内容和括号本身,只留下:

HLN

我尝试使用正则表达式来做到这一点,但我的困难在于这种模式:

"(.+?)"

当我使用它时,它总是给我一个PatternSyntaxException。如何修复我的正则表达式?

【问题讨论】:

    标签: java regex


    【解决方案1】:
    String foo = "(x)()foo(x)()";
    String cleanFoo = foo.replaceAll("\\([^\\(]*\\)", "");
    // cleanFoo value will be "foo"
    

    上面删除了字符串两边的空括号和非空括号。

    普通正则表达式:

    \([^\(]*\)

    你可以在这里测试:http://www.regexplanet.com/simple/index.html

    我的代码是基于以前的答案

    【讨论】:

      【解决方案2】:

      您可以使用以下正则表达式来查找括号:

      \([^)]*\)
      

      \( 匹配左括号,[^)]* 匹配除右括号外的任意数量的字符,\) 匹配右括号。

      如果您将其包含在 java 字符串中,则必须转义 \ 字符,如下所示:

      String regex = "\\([^)]*\\)";
      

      【讨论】:

        【解决方案3】:

        因为括号是正则表达式中的特殊字符,您需要对它们进行转义以明确匹配它们。

        例如:

        "\\(.+?\\)"
        

        【讨论】:

        • 他可能想要.+?如果可能有几个带括号的部分。
        • 是的,她。我放 ”?”以防万一多个括号大小写。 @jjnguy:感谢您的解释。它有效!
        【解决方案4】:
        String foo = "bar (baz)";
        String boz = foo.replaceAll("\\(.+\\)", ""); // or replaceFirst
        

        boz 现在是 "bar "

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-07
          相关资源
          最近更新 更多