1

我正在使用 java replaceAll() 方法来替换字符串中的匹配单词。在我的情况下,如果这个词在逗号 (,) 句号 (.) 或其他类似的东西旁边,这个词不会被替换。

例子:和。和,和;和(

这是代码:

body = body.replaceAll("(?i) "+knownWord + " ", replaceWord);

谁能建议我一个能够识别该字符串中所有单词的正则表达式?

4

2 回答 2

2

这正如您指定的那样:

(?<![.,])\b(\w+)\b(?![.,])

正则表达式可视化

调试演示

只要它们不在逗号或句点旁边,它就会找到(并捕获)单词。只需将您喜欢的任何标点符号添加到字符类中,例如[.,?(].

这是为 Java 字符串转义的正则表达式:"(?<![.,])\\b(\\w+)\\b(?![.,])"

至于忽略大小写,只需将CASE_INSENSITIVE标志传递给您的 Pattern 对象,例如

Pattern p = Pattern.compile(theAbovePattern, Pattern.CASE_INSENSITIVE);
于 2014-02-28T18:44:30.287 回答
1

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.

于 2014-02-28T18:39:44.673 回答