我正在使用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