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

时间:2015-05-01 12:03:53

标签: regex parsing random numbers pcre

数字长度在1到3位之间,以空格分隔。我对RegEx很糟糕,甚至不知道从哪里开始。

示例:

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

我不需要真正知道哪些项目是重复的 - 只要有任何项目。

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

4 个答案:

答案 0 :(得分:2)

  

回复:我不需要真正知道哪些项目是重复的 - 只要有任何项目。

如果字符串有重复的数字

,它将匹配
/(\b\d+\b)(?=.*?\b\1\b)/

答案 1 :(得分:2)

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

试试这个。看看演示。

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

答案 2 :(得分:1)

您可以使用“反向引用”来解决此问题......

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

意思是

  1. (^|[0-9])字符串的开头或非数字
  2. ([0-9]+)一个或多个数字
  3. (?=[^0-9])非数字字符,但不接受
  4. .*的任何
  5. [^0-9]非数字字符
  6. \2我们在2处发现了同样的事情(这是第二个带括号的表达式)
  7. ($|[^0-9])字符串结尾或非数字字符
  8. 在(3)中需要零宽度前瞻断言(?=...)的原因是因为两个副本在序列中可以是一个接一个(在它们之间只有一个非数字字符)

    需要所有非数字/字符串开头/字符串结尾的技巧,因为您不希望"1,2,3,4,33,9"匹配为重复,因为33的开头与{匹配} {1}}(您只想考虑完整数字,即取所有连续数字进行检查)。

答案 3 :(得分:-2)

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

也许这样的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