【问题标题】:Replace all words in java替换java中的所有单词
【发布时间】:2014-02-28 18:34:56
【问题描述】:

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

示例: 和。 和, 和; 和(

这是代码:

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

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

【问题讨论】:

标签: java regex word-boundary


【解决方案1】:

按照您指定的方式进行操作:

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

Debuggex Demo

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

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

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

Pattern p = Pattern.compile(theAbovePattern, Pattern.CASE_INSENSITIVE);

【讨论】:

  • + 1 用于说明性解释,但我认为@Asanka 实际上也想替换位于., 旁边的单词
  • 是的。我以为他的意思是相反的:他无法弄清楚如何捕捉标点符号旁边的单词:)
  • @alliteralmind 你能不能用你写的正则表达式替换这段代码。 body = body.replaceAll("(?i) "+knownWord + " ", replaceWord);因为我也忽略了区分大小写。
【解决方案2】:

如果您想匹配特定的 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));

上面会打印出以下内容:

我要去购物。

【讨论】:

  • 感谢您的解决方案,我现在正在尝试,我会尽快回复您。
  • @Asanka 当然 ;-) 让我知道它最后是否有效,或者您是否需要更多帮助。
  • 这不会阻止检测到标点符号旁边的单词,正如 OP 所指定的那样。
  • @alliteralmind 我认为你误解了这个问题
  • 哦,所以他不知道如何替换标点符号旁边的单词,是这样吗?我想“如果这个词紧挨着逗号 (,) 句号 (.) 或其他类似的东西,这个词就不会被替换。”意思是“不应该被替换”。吉普车。哦,好吧...
猜你喜欢
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 2016-04-05
  • 2012-10-23
  • 1970-01-01
相关资源
最近更新 更多