我有一个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("{*}", "");
有什么想法吗?提前谢谢。
答案 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.