我有一个字符串:
String text = "(plum) some other words, [apple], another words {pear}.";
我必须找到并替换括号中的单词,不要替换括号本身。
如果我写:
text = text.replaceAll("(\\(|\\[|\\{).*?(\\)|\\]|\\})", "fruit");
我明白了:
fruit some other words, fruit, another words fruit.
所以括号随着果实消失了,但我需要保留它们。
期望的输出:
(fruit) some other words, [fruit], another words {fruit}.
答案 0 :(得分:1)
这是你的正则表达式:
(?<=[({\[\(])[A-Za-z]*(?=[}\]\)])
在此测试:
为了在Java中使用它,请记住添加第二个反斜杠:
(?<=[({\\[\\(])[A-Za-z]*(?=[}\\]\\)])
它匹配0个或更多字母(大写或小写),前面是[,{,(后跟其中任何一个),},)中的任何一个。
如果你想在括号之间至少加一个字母,只需将'*'替换为'+',如下所示:
(?<=[({\[\(])[A-Za-z]+(?=[}\]\)])
答案 1 :(得分:1)
GCP展示了如何使用前瞻和后视来排除匹配部分中的括号。但是你也可以匹配它们,并在你的替换字符串中用捕获组引用它们:
text.replaceAll("([\\(\\[\\{]).*?([\\)\\]\\}])", "$1fruit$2");
另请注意,您可以使用字符组|
替换[]
或。