数字长度在1到3位之间,以空格分隔。我对RegEx很糟糕,甚至不知道从哪里开始。
示例:
59, 5, 53, 53, 545, 55, 545, 56, 5
我不需要真正知道哪些项目是重复的 - 只要有任何项目。
3个很棒的答案,非常感谢。
答案 0 :(得分:2)
回复:我不需要真正知道哪些项目是重复的 - 只要有任何项目。
如果字符串有重复的数字
,它将匹配/(\b\d+\b)(?=.*?\b\1\b)/
答案 1 :(得分:2)
答案 2 :(得分:1)
您可以使用“反向引用”来解决此问题......
/(^|[^0-9])([0-9]+)(?=[^0-9]).*[^0-9]\2([^0-9]|$)/
意思是
(^|[0-9])
字符串的开头或非数字([0-9]+)
一个或多个数字(?=[^0-9])
非数字字符,但不接受.*
的任何[^0-9]
非数字字符\2
我们在2处发现了同样的事情(这是第二个带括号的表达式)($|[^0-9])
字符串结尾或非数字字符在(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