正则表达式替换单词,同时保留空格/标点符号

时间:2015-04-19 05:46:08

标签: java regex

我正在尝试浏览文档并使用Java中的正则表达式更改名称的所有实例。我的代码看起来像这样:

Pattern replaceWordPattern = Pattern.compile("(^|\\s)" + replaceWord + "^|\\W");

接下来是:

String line = matcher.replaceAll("Alice");

问题是这不会保留后面的空格或标点符号或其他非单词字符。如果我有"杰克跳了起来"它成了" Alicejumped"。有谁知道解决这个问题的方法?

2 个答案:

答案 0 :(得分:3)

\W在replaceWord之后占用空间。将^|\\W替换为不使用符号的字边界\\b。考虑对第一个分隔符组执行相同操作,因为我怀疑您不想在那里使用任何内容。

Pattern replaceWordPattern = Pattern.compile("\\b" + replaceWord + "\\b");

如果单词边界的语义不适合您,请考虑使用不消耗输入的lookahead and lookbehind constructs

答案 1 :(得分:-3)

您在第二个非空白字符表达式上缺少括号:

Pattern replaceWordPattern = Pattern.compile("[^|\\s]" + replaceWord + "[^|\\W]");