python 正则表达式 断言解释

2025-06-26 11:01:31
推荐回答(1个)
回答1:

>>>re.findall(r'(?<=ab).*?(?=d)',s)  #非贪婪模式,先找左边有ab,再开始0个字符,
#查看是否右边有d,不满足再向后获取一个字符,直到满足右边有字符d;
#剩余字符串dddd再开始查找ab,搜索到字符串结尾,未找到,退出
['c']
>>> re.findall(r'(?<=ab).*(?=d)',s)  #贪婪模式,先找到ab,
#再匹配后面所有字符,查看后面有没有d,如果不满足再抛出右面一个字符
#倒退查找后面有没有d,直到找到;剩余字符串d中继续查找ab,不能找到,退出
['cddd']
>>> re.findall(r'(?<=ab).*?',s)      #左边有ab,非贪婪模式【先找到ab,后面0个字符,
#满足整个匹配;从剩余的dddd中再次查找,没找到ab,退出】
['']
>>> re.findall(r'(?<=ab).*',s)       ##左边有ab,贪婪模式【找到ab,匹配后面整个
#字符串,满足条件;没有剩余字符串,退出】
['cdddd']

>>> re.findall(r'.*(?=d)',s)         #先是贪婪模式匹配所有字符,依次倒退找右边是d的
#下次查找位置在本次位置的后面开始,即剩余一个d字符串中找,能够匹配,但匹配的是空串
['aabcddd', '']
>>> re.findall(r'.*?(?=d)',s)   #从0个字符串开始,判断后面有没有d,如果没有向右
#取得一个字符继续判断,直到找到d{故第一次aabc};下一次从剩余的dddd找,仍然是从0个字符
#判断,后面有d,返回空串;下次从剩余的ddd中……故四个空串
['aabc', '', '', '', '']
>>> re.findall(r'(d)',s)      #单个字符的捕获,有几个d返回共多少个元素的列表
['d', 'd', 'd', 'd']