Regex 正则表达式以匹配同一单词的第n次(n>;1)出现

Regex 正则表达式以匹配同一单词的第n次(n>;1)出现,regex,Regex,我想要一个正则表达式,它可以匹配文本中相同单词的第n次(n>1)出现。我需要这个来检测文本中重复的单词 示例:“一二三一一一九六一一一五十” ({one',one',ten}应该被检测到) 我找到了几个关于如何检测给定模式重复出现的示例。这个问题是不同的,因为我们事先不知道什么词会重复。正则表达式甚至可以做到这一点吗?严格来说,正则表达式不能做到这一点。但是,大多数“正则表达式”引擎都支持反向引用(严格来说,正则表达式无法做到),这将允许您匹配这些内容,例如: \b(\w+)\b.*\b\1\b

我想要一个正则表达式,它可以匹配文本中相同单词的第n次(n>1)出现。我需要这个来检测文本中重复的单词

示例:“一二三一一一九六一一一五” ({one',one',ten}应该被检测到)


我找到了几个关于如何检测给定模式重复出现的示例。这个问题是不同的,因为我们事先不知道什么词会重复。正则表达式甚至可以做到这一点吗?

严格来说,正则表达式不能做到这一点。但是,大多数“正则表达式”引擎都支持反向引用(严格来说,正则表达式无法做到),这将允许您匹配这些内容,例如:

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

…将在多个不同的位置匹配,第一个捕获包含重复的单词。

为什么要使用正则表达式来进行匹配,而不是将单词映射到它们的计数?您是否尝试过split()和collections.Counter()?Lookback应该能够做到这一点,但这取决于您的正则表达式风格(使用的工具/编程语言)有多少钱。手动筛选匹配的单词可能更容易(没有正则表达式)@Dave Newton测试正则表达式的限制:)@sln:谢谢。相应地编辑了问题。事实上,反向引用仍然是一种常规语言(在有限的输入字母表上),但有大量的语法糖分。@icktoofay我试过你的答案:。抱歉,我可能遗漏了一些内容,但它似乎无法正常工作。或者它一次只能检测一个重复的单词?@user1566515:如果你让它找到所有可能的匹配,包括重叠匹配,它会找到所有可能的匹配。不幸的是,该网站似乎只找到不重叠的匹配项。@icktoofay实际上,这对我的用例来说不是问题。谢谢!