2015-05-01 18 views
2

這些數字全部在1到3位數之間,並用空格分隔。我對RegEx很糟糕,甚至不知道從哪裏開始。我有一個9個隨機數字的列表,我如何找到與RegEx重複?

例子:

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

我並不需要真正知道哪些項目是重複的 - 只是如果有任何人在所有。

3好的答案,非常感謝。

+2

爲什麼是正則表達式?這可能不是這份工作的最佳工具。 –

+0

不幸的是它必須是正則表達式。這是一個腳本引擎,不支持其他任何東西。 – Jad

+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])末端或一個非數字字符

在(3)中需要零寬度前瞻斷言(?=...)的原因是因爲兩個副本可能在序列中一個接一個地緊挨着(它們之間只有一個非數字字符)。

所有非數字/啓動的串/因爲你不想做"1,2,3,4,33,9"要匹配重複的,因爲33開始匹配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 
2

回覆:我並不需要真正知道哪些項目是重複的 - 只是如果有任何人在所有。

它將匹配的情況下,當字符串中有重複號碼,

/(\b\d+\b)(?=.*?\b\1\b)/ 
相關問題