我有一个包含 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]|$)/
意思是
(^|[0-9])
字符串的开头或非数字
([0-9]+)
一位或多位
(?=[^0-9])
一个非数字字符,但不要接受它
.*
任何东西
[^0-9]
一个非数字字符
</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 演示。
号码的长度都是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]|$)/
意思是
(^|[0-9])
字符串的开头或非数字([0-9]+)
一位或多位(?=[^0-9])
一个非数字字符,但不要接受它.*
任何东西[^0-9]
一个非数字字符</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 演示。