這些數字全部在1到3位數之間,並用空格分隔。我對RegEx很糟糕,甚至不知道從哪裏開始。我有一個9個隨機數字的列表,我如何找到與RegEx重複?
例子:
59, 5, 53, 53, 545, 55, 545, 56, 5
我並不需要真正知道哪些項目是重複的 - 只是如果有任何人在所有。
3好的答案,非常感謝。
這些數字全部在1到3位數之間,並用空格分隔。我對RegEx很糟糕,甚至不知道從哪裏開始。我有一個9個隨機數字的列表,我如何找到與RegEx重複?
例子:
59, 5, 53, 53, 545, 55, 545, 56, 5
我並不需要真正知道哪些項目是重複的 - 只是如果有任何人在所有。
3好的答案,非常感謝。
您可以使用 「反向引用」 來解決這個...
/(^|[^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
開始匹配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
回覆:我並不需要真正知道哪些項目是重複的 - 只是如果有任何人在所有。
它將匹配的情況下,當字符串中有重複號碼,
/(\b\d+\b)(?=.*?\b\1\b)/
爲什麼是正則表達式?這可能不是這份工作的最佳工具。 –
不幸的是它必須是正則表達式。這是一個腳本引擎,不支持其他任何東西。 – Jad
您是否需要使用正則表達式查找重複項,或者您是否可以獲取每個數字並將其與循環中的其他數據進行比較? –