使用java replaceAll方法用一个正则表达式替换句子中的单词

时间:2014-02-06 03:59:13

标签: java regex replace str-replace

我正在尝试更换" is" "不是"在字符串中,但有一个例外,它不应该替换"是"这是其他词。

实施例

"This is an ant" --> "This is not an ant" [CORRECT]
"This is an ant" --> "This not is not an ant" [INCORRECT]

到目前为止,我所做的是

String result = str.replaceAll("([^a-zA-Z0-9])is([^a-zA-Z0-9])","$1is not$2");
result = result.replaceAll("^is([^a-zA-Z0-9])","is not$1");
result = result.replaceAll("([^a-zA-Z0-9])is$","$1is not");
result = result.replaceAll("^is$","is not");

但我认为只有一个正则表达式是可能的,但我无法弄明白。 有可能吗?

2 个答案:

答案 0 :(得分:5)

使用单词边界(\b):

result = str.replaceAll("\\bis\\b", "is not");

注意:\应该被转义。否则它匹配退格(U + 0008)。

请参阅Demo

答案 1 :(得分:2)

result = str.replaceAll("\\bis\\b", "is not");

\b匹配字边界。

[编辑]:感谢@Falsetru关于逃跑的通知 - 当然你是对的!