我有一个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("{*}", "");
有任何想法吗?提前致谢。
最佳答案
要匹配{
,您需要对其进行转义。由于它在正则表达式中具有某些特殊含义。因此,您需要\\{
和\\}
。或者,您也可以将它们包含在字符类中。
然后要匹配它们之间的任何内容,可以使用.*
。 dot (.)
与任何字符匹配。 *
是一个量词,表示匹配0 or more
。
因此,您的正则表达式将是:-
\\{.*?\\}
或者: -
[{].*?[}]
请注意,我在那里使用了一个勉强的量词-
.*?
。注意最后的?
。在这种情况下,它用于匹配直到第一个}
。如果您使用.*
而不是.*?
,则您的正则表达式将覆盖从第一个{
到最后一个}
的完整字符串,并替换所有内容。同样,特殊的正则表达式元字符在
character class
(即[]
东西)中使用时也没有特殊含义。这就是为什么,当您那样使用它时,您不必逃避它们。因此,第二个正则表达式。这看起来很简单,不是吗?好的,现在是时候阅读一些教程以了解有关
Regular Expression
的更多信息了。您可以以http://www.regular-expressions.info/tutorial.html开头