2016-01-27 18 views
2

我正在尋找一行中的特定數字序列。我可以用一個例子更好地解釋:正則表達式:找到一個可變數字序列

00001 # first search criteria - line 1 
00010 # second search criteria - line 2 

所以每行有0或1。5位我找所有0的組合,除了1位,可以是1,這1可在5位數字的任何位置。

正則表達式的代碼我有0 5個位數是

^((0\s*?){5}) # there may be spaces between the numbers 

線路1的情況下,前述情況與下面的正則表達式的代碼來選擇:

^((0\s*?){4})\s*(1) 

我的問題是如何編寫在正則表達式編碼1的變化位置以覆蓋5個/位置。 謝謝。

回答

1

您可以使用此先行基於正則表達式:

^(?=[0\s]*1[0\s]*$)(?:\s*[01]\s*){5}$ 

RegEx Demo

先行(?=[0\s]*1[0\s]*$)將強制唯一的單1在輸入的任何位置,爲(?:\s*[01]\s*){5}將確保輸入只有0和1與5位長度也允許在任何地方的空白。

+0

如果在數字之間沒有空格,這個工程。我如何調整以允許空間(甚至標籤),正如我所提及的那樣? – user1739581

+1

這工作得很好! – user1739581

1

您可以使用兩個條件。
第一個保險1未找到。
第二個保險1被發現。

(?:((?(1)(?!))1)|0){5}(?(1)|(?!))

擴展

(?: 
     (       # (1 start) 
      (?(1) (?!)) 1 
    )        # (1 end) 
    | 0 
){5} 
(?(1) | (?!))