我有一个包含 9 个随机数的列表,如何使用 RegEx 查找重复项?

I have a list of 9 random numbers, how do I find duplicates with RegEx?

号码的长度都是1到3位,中间用空格隔开。我对正则表达式很糟糕,甚至不知道从哪里开始。

示例:

59, 5, 53, 53, 545, 55, 545, 56, 5

我不需要真正知道哪些项目是重复的 - 如果有的话。

3 个很好的答案,非常感谢。

正则表达式是错误的工具。

也许像这样的 Perl 单行代码?

perl -MList::MoreUtils=uniq -E"say join ', ', uniq shift =~ /\d+/g" "59, 5, 53, 53, 545, 55, 545, 56, 5"

输出

59, 5, 53, 545, 55, 56

Re: I don't need to actually know which items are duplicates - just if there are any at all.

如果字符串有重复的数字,则匹配,

/(\b\d+\b)(?=.*?\b\b)/

你可以用"back-references"来解决这个...

/(^|[^0-9])([0-9]+)(?=[^0-9]).*[^0-9]([^0-9]|$)/

意思是

  1. (^|[0-9]) 字符串的开头或非数字
  2. ([0-9]+)一位或多位
  3. (?=[^0-9]) 一个非数字字符,但不要接受它
  4. .*任何东西
  5. [^0-9] 一个非数字字符
  6. </code> 与我们在 2 处发现的相同(这是第二个带括号的表达式)</li> <li><code>($|[^0-9]) 字符串结尾或非数字字符

在 (3) 中需要零宽度先行断言 (?=...) 的原因是因为两个副本可能在序列中一个接一个(中间只有一个非数字字符)他们)。

需要所有 non-numeric/start-of-string/end-of-string 技巧,因为您不希望 "1,2,3,4,33,9" 匹配为重复项,因为 33 的开头与 3 匹配(您只想考虑完整数字,即取所有连续数字进行检查)。

\b(\d+)\b(?=.*\b\b)

尝试 this.See 演示。

https://regex101.com/r/uE3cC4/7