2013-06-01 21 views
0

我試圖做一個正則表達式來匹配的所有組。在一個字符串,直到下一個A.(Python)的Python的正則表達式字符圖案組

例如: DFDAXDJSDSJDAFGCJASDJASAGXCJAD到:

'AXDJSDSJD' 
'AFGCJ' 
'ASDJ' 
'AS' 
'AGXCJ' 
'AD' 

我想出了最接近的事是:

string="DFDAXDJSDSJDAFGCJASDJASAGXCJAD" 
r=re.compile('(A.[!=A]*)+') 
matchObj = r.findall(string, re.M|re.I) 

返回AF, AS, ASA, AD

它爲什麼跳過第一個?爲什麼它沒有返回所有的字符,直到下一個A?

回答

2

你可以只splitA字符串:

>>> s = "DFDAXDJSDSJDAFGCJASDJASAGXCJAD" 
>>> s.split('A') 
['DFD', 'XDJSDSJD', 'FGCJ', 'SDJ', 'S', 'GXCJ', 'D'] 

# add a leading `A` to each match 'on the fly' 
>>> [ 'A%s' % s for s in s.split('A') ] 
['ADFD', 'AXDJSDSJD', 'AFGCJ', 'ASDJ', 'AS', 'AGXCJ', 'AD'] 

或者使用另購positive lookahead

>>> re.findall('(A[^A]+(?=A)?)', s, re.IGNORECASE | re.MULTILINE) 
['AXDJSDSJD', 'AFGCJ', 'ASDJ', 'AS', 'AGXCJ', 'AD'] 

或者乾脆(如果你不關心一些下一個A - 這是相當於說它是可選的):

>>> re.findall('(A[^A]+)', s, re.IGNORECASE | re.MULTILINE) 
['AXDJSDSJD', 'AFGCJ', 'ASDJ', 'AS', 'AGXCJ', 'AD'] 
+0

第一項不匹配:'ADFD'不's'。 – DSM

+0

謝謝,這可能是一個不同的問題,而且更加複雜,但是如果我想爲A和J這麼做呢?例如:'AXD''JSDS''JD'''AFGC''J''ASD''J''AS''AHXC''J''AD' – user2443271

+0

另外,是否有一些問題與不同的字母?我嘗試了不同的字母,他們似乎沒有顯示相同的結果(只有最後一場比賽/缺少第一場比賽) – user2443271

2

我可以提出以下方法:

string="DFDAXDJSDSJDAddaFGCJASDJASAGXCJAD" 
r=re.compile('A[^A]*', re.I|re.M) 
matchObj = r.findall(string) 
matchObj