1 ?:不捕获分组
在写正则时经常会使用()来包含作为一个整体的规则,但是同时()在正则里有分组的作用,如果我们只想简单的使用括号而不是分组捕获,findall结果可能会和预想的不一样,因为使用findall时会只保留分组的内容
解决方法:
分组的括号里加?:
#匹配年月日格式的日期
reg="[1-9]\d{3}年(0?[1-9]|1[0-2])月(0?[1-9]|[1-2]\d|3[01])日"
result=re.findall(reg,"2020年05月11日和2020年05月11日")
#结果[('05', '11'), ('05', '11')]
reg2="[1-9]\d{3}年(?:0?[1-9]|1[0-2])月(?:0?[1-9]|[1-2]\d|3[01])日"
#结果['2020年05月11日', '2020年05月11日']
2 re.S
爬虫使用findall进行正则匹配时,如果遇到换行\n不能跨行匹配,因为(.*?)是匹配不到换行符的,加上re.S参数就可以匹配\n