我正在使用 java replaceAll() 方法来替换字符串中的匹配单词。在我的情况下,如果这个词在逗号 (,) 句号 (.) 或其他类似的东西旁边,这个词不会被替换。
例子:和。和,和;和(
这是代码:
body = body.replaceAll("(?i) "+knownWord + " ", replaceWord);
谁能建议我一个能够识别该字符串中所有单词的正则表达式?
我正在使用 java replaceAll() 方法来替换字符串中的匹配单词。在我的情况下,如果这个词在逗号 (,) 句号 (.) 或其他类似的东西旁边,这个词不会被替换。
例子:和。和,和;和(
这是代码:
body = body.replaceAll("(?i) "+knownWord + " ", replaceWord);
谁能建议我一个能够识别该字符串中所有单词的正则表达式?
这正如您指定的那样:
(?<![.,])\b(\w+)\b(?![.,])
只要它们不在逗号或句点旁边,它就会找到(并捕获)单词。只需将您喜欢的任何标点符号添加到字符类中,例如[.,?(]
.
这是为 Java 字符串转义的正则表达式:"(?<![.,])\\b(\\w+)\\b(?![.,])"
至于忽略大小写,只需将CASE_INSENSITIVE
标志传递给您的 Pattern 对象,例如
Pattern p = Pattern.compile(theAbovePattern, Pattern.CASE_INSENSITIVE);
If you want to match specific knownWord do:
body = body.replaceAll("(?i)\\b"+knownWord + "\\b", replaceWord);
I think what you were looking for is the \\b
(word boundary) it is used to detect where words start/end, so commas or dots should no longer be a problem then.
More detailed example in response to your comment:
String body = "I'm going to school. ";
String knownWord = "school";
String replaceWord = "shop";
System.out.println(body.replaceAll("(?i)\\b"+knownWord + "\\b", replaceWord));
The above will print out the following:
I'm going to shop.