python re.M使用详解
re.M 多行匹配,影响 ^ 和 $
看如下代码:
s = '12 34\n56 78\n90' ss=re.findall(r'12(\d)0', s,re.M)
打印ss,结果是空。
再看看我们这样写
ss=re.findall(r'\d', s,re.M)
打印结果是['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
ss=re.findall(r'\d+', s,re.M)
打印结果是:['12', '34', '56', '78', '90']
ss=re.findall(r'^\d+', s,re.M)
打印结果是:['12', '56', '90']
ss=re.findall(r'^\d+$', s,re.M)
打印结果是:['90']
ss=re.findall(r'\d+$', s,re.M)
打印结果是:['34', '78', '90']
总结:re.M换行后,需要重新匹配规则,如果在当前行没有规则匹配内容,就会返回空。所以,当我们在使用bs4采集网页内容的时候,想使用,re.sub('','',str,re.M)来进行多行匹配替换,是不可行的。如要将这些字符替换成空
<div class="reed-xiongzhanghao"> <script>cambrian.render('body')</script> </div>
使用re.sub('<div(.*?)</div>','',str,re.M)是不会成功替换的。这个时候我们我们如果想要得到效果就得先对str进行将换行符替换为空的步骤:
re.sub('\n','',str)
然后再使用上面的规则进行替换,就能够达到预期效果
评论