【问题标题】:How to remove embedded braces in Java string?如何删除Java字符串中的嵌入式大括号?
【发布时间】:2012-12-26 16:21:34
【问题描述】:

我有一个 Java 字符串,可能在一个较大的字符串中多次包含“{”和“}”对:

"My name is {name}. I am a {animal}. I like to {activity} whenever it rains."

等等。我正在尝试编写代码来删除这些对的所有实例:

"My name is . I am a . I like to whenever it rains."

这些对可以出现在字符串中任何地方,也可能根本不出现。显然String#replaceAll(someRegex, "") 在这里是有序的,但我似乎无法正确获得someRegex

// My best attempt.
String stripped = toStrip.replaceAll("{*}", "");

有什么想法吗?提前致谢。

【问题讨论】:

  • 你到现在有什么?这并不难。你当然应该试一试。
  • @RohitJain - 请查看我的更新以获得最佳(不成功)尝试。
  • 可能需要使用 .* 而不是 *,因为它是一个正则表达式
  • 表示零个或多个 { 后跟 },您可能想要 "{.*?}"
  • @SwapnilS :您可能需要重新阅读文档

标签: java regex string replaceall


【解决方案1】:

要匹配{,您需要对其进行转义。因为它在正则表达式中有一些特殊的含义。因此,您需要\\{\\}。或者您也可以将它们包含在一个字符类中。

然后要匹配它们之间的任何内容,您可以使用.*dot (.) 匹配任何字符。而*是一个量词,表示匹配0 or more

因此,您的正则表达式将是:-

\\{.*?\\}  

或:-

[{].*?[}]

请注意,我在那里使用了一个不情愿的量词 - .*?。注意最后的?。在这种情况下,它用于匹配到第一个 }。如果您使用.* 而不是.*?,您的正则表达式将覆盖从第一个{ 到最后一个} 的完整字符串,并替换所有内容。

另外,一个特殊的正则表达式元字符,在 character class 中使用时没有特殊含义 - 即 [] 事物。这就是为什么,当你这样使用它时,你不需要逃避它们。因此是第二个正则表达式。

这看起来很简单,不是吗?好的,现在是时候通过一些教程来了解更多关于Regular Expression 的信息了。你可以从http://www.regular-expressions.info/tutorial.html开始

【讨论】:

  • 很好的详尽解释。
  • 您通常不必在正则表达式中转义 {},除非它们包含数字。以下是一些示例:regex101.com/r/xR8yU3
  • @Lindrian。嗯,你是对的。在某个地方,我自己觉得没有必要逃避它们。我有时对此感到困惑。这就是为什么我更喜欢使用带有特殊字符的Character class
【解决方案2】:

尝试使用最简单的正则表达式\{\w*\},如下所示:

    String s  = "My name is {name}. I am a {animal}. I like to {activity} "+
                "whenever it rains.";
    System.out.println(s.replaceAll("\\{\\w*\\}", ""));

上述正则表达式将 {} 中包含的单词字符条带化。如果您想包含某些特殊字符,请将它们与大括号内提到的 \w 一起包含。

【讨论】:

    【解决方案3】:

    replaceAll("\\{.*?\\}", "") 应该可以完成这项工作

    String stripped = "My name is {name}. I am a {animal}. I like to {activity} whenever it rains.".replaceAll("\\{.*?\\}", "");
    System.out.println(stripped);
    

    打印My name is . I am a . I like to whenever it rains.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 2012-03-16
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      相关资源
      最近更新 更多