我试图做一个正则表达式模式来匹配字符串中所有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?
2 回答

江户川乱折腾
TA贡献1851条经验 获得超5个赞
您可以将字符串拆分为A:
>>> 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']
或使用可选的正向前行:
>>> 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/150
提交
取消