我正在使用java replaceAll()方法替换字符串中的匹配单词。在我的情况下,如果这个单词在逗号(,)fullstop(。)或其他类似的旁边,那么这个单词就不会被替换。
示例: 和。 和, 和; 和(
这是代码:
body = body.replaceAll("(?i) "+knownWord + " ", replaceWord);
有人可以建议我一个能够识别这个字符串中所有单词的正则表达式吗?
答案 0 :(得分:2)
这是指定的:
(?<![.,])\b(\w+)\b(?![.,])
只要它们不在逗号或句点旁边,它就会找到(并捕获)单词。只需在字符类中添加您喜欢的标点符号,例如[.,?(]
。
以下是针对Java字符串转义的正则表达式:"(?<![.,])\\b(\\w+)\\b(?![.,])"
就忽略大小写而言,只需将CASE_INSENSITIVE
标志传递给Pattern对象,例如
Pattern p = Pattern.compile(theAbovePattern, Pattern.CASE_INSENSITIVE);
答案 1 :(得分:1)
如果您想匹配特定的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));
以上将打印出以下内容:
我要去购物。