2011-06-22 35 views
0

Get groups with regex and OR使用正則表達式強制執行序列和組同一時間?

樣品

AD

ABCDEFG HIJKLMN
AB HIJKLMN
AC DJKEJKW SJKLAJL JSHELSJ

規則延續的位:始終2個字符碼(AB | AC | AD),然後在7個字符之後的任何數字(> 1)代碼(至少一個7char代碼)。組之間的空間也可以是'。'

有了這個表達我得到好聽分組 /^(AB|AC|AD)|((\S{7})+)/
我[0]等訪問與組2chars代碼。

我可以在同一時間執行規則嗎?

隨着上述正則表達式下面的線也有效(因爲OR的|在正則表達式語句)

AC
dfghjkl
asdfgh hjklpoi

這是不是我所需要。

再次感謝正則表達式專家

回答

1

就個人而言,我會在兩個單獨的步驟

做到這一點
  1. 我會檢查字符串正則表達式匹配
  2. 我會split根據分隔符字符匹配字符串[ .]

此代碼:

def input = [ 
    'AD ABCDEFG HIJKLMN', 
    'AB HIJKLMN', 
    'AC DJKEJKW SJKLAJL JSHELSJ', 
    'AC', 
    'dfghjkl', 
    'asdfgh hjklpoi', 
    'AC DJKEJKW.SJKLAJL JSHELSJ', 
] 

def regexp = /^A[BCD]([ .](\S{7}))+$/ 

def result = input.inject([]) { list, inp -> 
    // Does the line match the regexp? 
    if(inp ==~ regexp) { 
    // If so, split it 
    list << inp.split(/[ .]/) 
    } 
    list 
} 

println result 

顯示你什麼,我的意思是一個例子,並打印出:

[[AD, ABCDEFG, HIJKLMN], [AB, HIJKLMN], [AC, DJKEJKW, SJKLAJL, JSHELSJ], [AC, DJKEJKW, SJKLAJL, JSHELSJ]] 
+0

似乎你的做法是聰明/性能更好,而不是執行對2個正則表達式語句同一行爲了驗證和2.splitting謝謝! – javadude

+0

如果你需要編輯它,你會更加快樂:-)祝你好運! –

2

試一下:

^(A[BCD])(([ .])([A-Z]{7}))+$ 
相關問題