如何删除Java字符串中的嵌入式括号?

时间:2012-12-26 16:21:34

标签: java regex string replaceall

我有一个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("{*}", "");

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

3 个答案:

答案 0 :(得分:9)

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

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

所以,你的正则表达式是: -

\\{.*?\\}  

或: -

[{].*?[}]

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

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

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

开始

答案 1 :(得分:1)

尝试使用最简单的正则表达式\{\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一起包含。

答案 2 :(得分:0)

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.