我有一个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开头

09-10 02:01
查看更多