5

我有一个 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."

这些对可以出现在字符串中的任何位置,并且可能根本不会出现。显然 aString#replaceAll(someRegex, "")在这里是有序的,但我似乎无法someRegex正确:

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

有任何想法吗?提前致谢。

4

3 回答 3

9

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

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

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

\\{.*?\\}  

或者: -

[{].*?[}]

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

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

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

于 2012-12-26T16:26:06.097 回答
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大括号内提到的一起包含在内。

于 2012-12-26T16:32:12.570 回答
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.

于 2012-12-26T16:27:20.503 回答