查找并替换括号中的字符

时间:2017-12-06 13:14:25

标签: java regex

我有一个字符串:

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}.

2 个答案:

答案 0 :(得分:1)

这是你的正则表达式:

(?<=[({\[\(])[A-Za-z]*(?=[}\]\)])

在此测试:

https://regex101.com/

为了在Java中使用它,请记住添加第二个反斜杠:

(?<=[({\\[\\(])[A-Za-z]*(?=[}\\]\\)])

它匹配0个或更多字母(大写或小写),前面是[,{,(后跟其中任何一个),},)中的任何一个。

如果你想在括号之间至少加一个字母,只需将'*'替换为'+',如下所示:

(?<=[({\[\(])[A-Za-z]+(?=[}\]\)])

答案 1 :(得分:1)

GCP展示了如何使用前瞻和后视来排除匹配部分中的括号。但是你也可以匹配它们,并在你的替换字符串中用捕获组引用它们:

text.replaceAll("([\\(\\[\\{]).*?([\\)\\]\\}])", "$1fruit$2");

另请注意,您可以使用字符组|替换[]或。