我正在尝试使用正则表达式模式来匹配字符串中所有A ..的组,直到下一个A.(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之前返回所有字符?
答案 0 :(得分:2)
您可以A
上的字符串split:
>>> 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']
或者简单地说(如果你不关心某些 next A - 这相当于说它是可选的):
>>> re.findall('(A[^A]+)', s, re.IGNORECASE | re.MULTILINE)
['AXDJSDSJD', 'AFGCJ', 'ASDJ', 'AS', 'AGXCJ', 'AD']
答案 1 :(得分:2)
我可以提出以下方法:
string="DFDAXDJSDSJDAddaFGCJASDJASAGXCJAD"
r=re.compile('A[^A]*', re.I|re.M)
matchObj = r.findall(string)
matchObj