我正在尝试使用正则表达式查找子字符串的所有出现。子字符串由三部分组成,以一个或多个“ A”开头,然后是一个或多个“ N”,最后以一个或多个“ A”结尾。让一个字符串“ AAANAANABNA”,如果我解析该字符串,我应该得到两个子字符串“ AAANAA”和“ AANA”作为输出。因此,我尝试了以下代码。
import regex as re
reg_a='A+N+A+'
s='AAANAANABNA'
sub_str=re.findall(reg_a,s,overlapped=True)
print(sub_str)
而且,我得到以下输出,
['AAANAA', 'AANAA', 'ANAA', 'AANA', 'ANA']
但是,我希望输出为
['AAANAA', 'AANA']
也就是说,第一场比赛的尾随A应该是下一场比赛的领先A。我怎么能知道呢?
确保A
左侧没有:
>>> reg_a='(?<!A)A+N+A+'
>>> print( re.findall(reg_a,s,overlapped=True) )
['AAANAA', 'AANA']
本(?<!A)A+N+A+
场比赛
(?<!A)
-与位置不匹配的负向后搜索 A
A+
-一个或多个A
小号N+
-一个或多个N
小号A+
-一个或多个A
小号请注意,您也可以re
用来获取匹配项:
>>> import re
>>> re_a = r'(?=(?<!A)(A+N+A+))'
>>> print( re.findall(re_a, s) )
['AAANAA', 'AANA']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句