如何删除Java字符串中嵌入的大括号?
我有一个Java字符串,在一个较大的字符串中多次包含“如何删除Java字符串中嵌入的大括号?,java,regex,string,replaceall,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." 这些对可以出现在字符串中的任何位置,也可能根本不会出现。显然这里有一个字符串#replaceAll(someRe
{
”和“}
”对:
"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."
这些对可以出现在字符串中的任何位置,也可能根本不会出现。显然这里有一个字符串#replaceAll(someRegex,“”
,但我似乎无法正确理解someRegex
:
// My best attempt.
String stripped = toStrip.replaceAll("{*}", "");
有什么想法吗?提前感谢。要匹配
{
,您需要对其进行转义。因为它在正则表达式中有一些特殊的含义。因此,您需要\{
和\}
。或者您也可以将它们包含在字符类中
然后要匹配它们之间的任何内容,可以使用*
。点(.)
匹配任何字符。*
是一个量词,表示匹配0或更多
因此,您的正则表达式是:-
\\{.*?\\}
或:-
请注意,我在这里使用了一个不情愿的量词-*?
。请注意结尾处的?
。在本例中,它用于匹配第一个}
。如果使用*
而不是*?
,则正则表达式将覆盖从第一个{
到最后一个}
的整个字符串,并替换所有内容
另外,一个特殊的正则表达式元字符,在字符类
-即[]
中使用时没有特殊意义。这就是为什么,当你这样使用它时,你不需要逃避它们。因此出现了第二个正则表达式
这看起来很简单,不是吗?好的,现在是学习有关正则表达式的更多教程的时候了。你可以从replaceAll(“\{.*.\},”)开始。
应该做这项工作
String stripped = "My name is {name}. I am a {animal}. I like to {activity} whenever it rains.".replaceAll("\\{.*?\\}", "");
System.out.println(stripped);
打印我的名字是。我是一个。每当下雨的时候我都喜欢去。
尝试使用最简单的正则表达式\{\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
一起包含。到目前为止,您得到了什么?没那么难。您当然应该试一试。@RohitJain-请查看我的更新以获得最佳(不成功)尝试。可能需要使用。*而不是*,因为它是一个表示零或更多{后跟}的regexp,您可能需要“{.*}”@SwapnilS:您可能需要重新阅读完整的文档解释。您通常不必在正则表达式中转义{}
,除非它们包含数字。这里有一些样本:@Lindrian。嗯,你说得对。在某些地方,我自己觉得没有必要逃避他们。我有时会对此感到困惑。这就是为什么我更喜欢对特殊字符使用字符类
。
String s = "My name is {name}. I am a {animal}. I like to {activity} "+
"whenever it rains.";
System.out.println(s.replaceAll("\\{\\w*\\}", ""));