分别令p=p1~p5,运行下列代码,对运行结果进行分析,从而掌握(1)(?=…)和(?!…)“不输出”的含义;(2)子模式()的作用
# 注释不保正确
import re
p1 = r'(\w).*\1' # 匹配重复出现的字符并捕获第一个字符,匹配之后立即开始下一次匹配的搜索
p2 = r'(\w)(.*\1)' # 按顺序匹配某字符开头且以其结尾的字符串并分别返回首字符串和除首字符串的其他字符串,匹配之后立即开始下一次匹配的搜索
p3 = r'(\w)(?=.*\1)' # 查找字符串中所有出现次数大于1的字符。正向肯定预查,匹配重复出现的字符并捕获第一个字符。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
p4 = r'(\w)(?!.*\1)' # 查找字符串中每个字符的最后一次出现
p5 = r'((\w)(.*\2))' # 先匹配总模式,按顺序匹配某字符开头并以其结尾的字符串并返回,在匹配子模式并分别返回首字符串和除首字符串的其他字符串
s = 'abcdcbabcdcbee'
p = p1
print(f"{p1}-->{re.findall(p, s)}")
p = p2
print(f"{p2}-->{re.findall(p, s)}")
p = p3
print(f"{p3}-->{re.findall(p, s)}")
p = p4
print(f"{p4}-->{re.findall(p, s)}")
p = p5
print(f"{p5}-->{re.findall(p, s)}")
运行结果如下: