我想使用java regex replace替换句子中的单词。

测试字符串是a_b a__b a_bced adbe a_bc_d 'abcd' ''abcd''

如果我想替换所有以a开头和以d结尾的单词。
我正在使用String.replaceAll("(?i)\\ba[a-zA-Z0-9_.]*d\\b","temp")

将其替换为a_b a__b temp adbe a_bc_d 'temp' ''temp''

如果我不想在引号中考虑字符串,我的正则表达式应该是什么?

我用String.replaceAll("[^'](?i)\\ba[a-zA-Z0-9_.]*d\\b[^']","temp")
将其替换为a_b a__btempadbe temp'abcd' ''abcd''
它删除了该单词的一个空格。
有什么方法可以只在引号内替换该字符串吗?

PS:此String.replaceAll("[^'](?i)\\ba[a-zA-Z0-9_.]*d\\b[^']"," temp ")有解决方法。但是它在某些情况下会失败。

如果我想替换句子中的单词并且我不应该在引号中考虑字符串,我的正则表达式应该是什么?
提前致谢...!!!

最佳答案

您可以使用环视断言:

string = string.replaceAll("(?i)(?<!')\\ba[a-zA-Z0-9_.]*d\\b(?!')", "temp");


RegEx Demo

Read more about lookarounds

10-07 19:07
查看更多