我正在尝试浏览文档并使用Java中的正则表达式更改名称的所有实例。我的代码看起来像这样:
Pattern replaceWordPattern = Pattern.compile("(^|\\s)" + replaceWord + "^|\\W");
接下来是:
String line = matcher.replaceAll("Alice");
问题是这不会保留后面的空格或标点符号或其他非单词字符。如果我有"杰克跳了起来"它成了" Alicejumped"。有谁知道解决这个问题的方法?
答案 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]");