我正在使用java replaceAll()方法替換字符串中的匹配單詞。在我的情況下,如果這個單詞在逗號(,)fullstop(。)或其他任何類似的字詞旁邊,那麼這個單詞不會被替換。替換java中的所有單詞
示例: 和。和 和; 和(
這是代碼:
body = body.replaceAll("(?i) "+knownWord + " ", replaceWord);
任何人都可以請建議我的正則表達式,它能夠識別該字符串的所有單詞的
我正在使用java replaceAll()方法替換字符串中的匹配單詞。在我的情況下,如果這個單詞在逗號(,)fullstop(。)或其他任何類似的字詞旁邊,那麼這個單詞不會被替換。替換java中的所有單詞
示例: 和。和 和; 和(
這是代碼:
body = body.replaceAll("(?i) "+knownWord + " ", replaceWord);
任何人都可以請建議我的正則表達式,它能夠識別該字符串的所有單詞的
如果你想匹配特定? knownWord做:
body = body.replaceAll("(?i)\\b"+knownWord + "\\b", replaceWord);
我想你要找的是\\b
(單詞邊界)它用於檢測單詞開始/結束的位置,因此逗號或點應該不再是問題。
更多響應您的評論詳細的例子:
String body = "I'm going to school. ";
String knownWord = "school";
String replaceWord = "shop";
System.out.println(body.replaceAll("(?i)\\b"+knownWord + "\\b", replaceWord));
上面會打印出以下幾點:
我要去逛街。
這並不爲你指定:
(?<![.,])\b(\w+)\b(?![.,])
它發現(並獲取)的話,只要他們不相鄰的逗號或句號。只需在字符類中添加你喜歡的任何標點符號,如[.,?(]
。
這裏是正則表達式逃過Java字符串:"(?<![.,])\\b(\\w+)\\b(?![.,])"
至於忽略的情況下,只要傳遞CASE_INSENSITIVE
標誌的圖形對象,如具有
Pattern p = Pattern.compile(theAbovePattern, Pattern.CASE_INSENSITIVE);
+ 1用於說明性的解釋,但是我認爲@Asanka實際上也想要替換它們,如果它們在旁邊'',' – donfuxx
是的。我認爲他的意思是相反的:他不能*弄清楚如何*在標點符號旁邊捕捉單詞:) – aliteralmind
@aliteralmind您能否用您編寫的正則表達式替換此代碼。 body = body.replaceAll(「(?i)」+ knownWord +「」,replaceWord);因爲我也忽略了區分大小寫。 –
HTTP:// WWW。 regular-expressions.info/wordboundaries.html – Joel