【问题标题】:All duplicate words所有重复的单词
【发布时间】:2015-03-22 11:33:53
【问题描述】:

我需要找到所有重复的单词。 例如:

"abc some word abc eee word abc"

应该匹配:

abc abc abc word word

或

abc word abc word abc

我试过了:"(\b\w+\b)(?=.*?\b\1\b)",但它与最后一个重复的单词不匹配。

附言 是否可以使用正则表达式(java 或 .net 正则表达式引擎)找到所有重复项?

【问题讨论】:

  • 因为(?=.*?\b\1\b)是一个断言,它不会匹配任何字符。
  • 说有可能;你为什么要用正则表达式来做呢?性能无关紧要吗?
  • 专门针对此任务 - 性能无关紧要。主要目标 - 使用正则表达式(或几乎正则表达式)
  • 你为什么不按照 EddyG 的建议扫描文本输入并构建一个 Map

标签: java .net regex


【解决方案1】:

我建议不要使用正则表达式,而是简单地使用一个

Map<String, Integer>

键是您从文本中解析出来的单词;该值表示一个计数器(用于出现的次数)。用 1 初始化计数器;当你再次找到相同的单词时,会增加。

【讨论】:

    【解决方案2】:
    \b(\w+)\b(?=(?:(?!\b\1\b).)*\b(\1)\b(?:(?!\b\1\b).)*$)|\b(\w+)\b(?=.*?\b\3\b)
    

    试试这个。查看演示。获取captures 或groups。

    https://regex101.com/r/pT4tM5/31

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-16
      • 2019-11-18
      • 2013-10-21
      • 2016-03-09
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多