2015-04-19 36 views
0

我正在嘗試通過文檔並使用Java中的正則表達式更改名稱的所有實例。我的代碼看起來是這樣的:由正則表達式替換單詞,同時保留空格/標點符號

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

如下:

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

的問題是,這並不保留隨後的空格或標點符號或其他非字字符。如果我有「傑克跳躍」,它會變成「愛麗絲跳躍」。有誰知道解決這個問題的方法嗎?

回答

3

\W消耗替換字後面的空格。將^|\\W替換爲不消耗符號的字邊界\\b。考慮爲第一個分隔符組做同樣的事情,因爲我懷疑你不想在那裏消費任何東西。

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

如果語義字邊界的不適合你,可以考慮使用lookahead and lookbehind constructs不消耗輸入過。

-3

你錯過第二非空白字符表達括號:

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

您的正則表達式語法不正確,它應該是'(...)'而不是字符類。這也不符合OP的要求。 – hwnd

相關問題