【问题标题】:Finding duplicate words within a string regex C/W在字符串正则表达式 C/W 中查找重复的单词
【发布时间】:2013-03-26 01:08:10
【问题描述】:

我目前正在研究 Java 中的正则表达式,并想尝试在字符串中查找重复的单词。如果我输入了一个字符串,例如'This this is great.'。我使用的是\\b(\\w+) \\1\\b,但它只能识别两个重复的单词,例如字符串中的“this this”。

对此有何帮助?

【问题讨论】:

  • 为什么要为此使用正则表达式?您可以使用 split 转换为 String 数组,然后有很多选项可以找出重复的单词
  • 如果你真的刚刚开始涉足正则表达式,这可能是一个太复杂的起点......更不用说正则表达式可能是错误的工作工具。这将很多使用基本的字符串方法更容易做到。
  • 我之前应该说过,但我正在为我的大学/大学课程做这些正则表达式示例,而这个示例是唯一剩下的一个。我已经被它难住了好几个小时了!

标签: java regex string duplicates words


【解决方案1】:

将“忽略大小写”开关 (?i) 添加到您的正则表达式:

(?i)\\b(\\w+) \\1\\b

或者,您可以先将输入折叠为小写:

input.toLowerCase()

注意:如果您使用的是String.matches(),则正则表达式必须与整个 输入相匹配,因此您需要将.* 添加到正则表达式的两端:

.*(?i)\\b(\\w+) \\1\\b.*

【讨论】:

  • 这对我不起作用,它与两个词并排工作。但是“这行不通”不行。
  • 这些话并排;-)
  • 我理解:P,当我在一个字符串中使用两个以上的单词时,它不会识别出两个单词(彼此相邻的)是同一个单词。
  • 知道了。这不是我解释“并排”的方式。现在它更有意义了。
  • 如果您将此正则表达式与String.matches() 一起使用,请参阅答案底部的注释
【解决方案2】:
String pattern = "\\b(\\w+)(\\b\\W+\\b\\1\\b)*"; 
Pattern r = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);

您可以使用Matcher.group()Matcher.group(1) 用这种方法替换所有重复的单词。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 2016-09-29
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2019-01-20
    相关资源
    最近更新 更多