Python中正则表达式的多行匹配

( 因为最近在学scrapy框架,对css和xpath选择器都不太熟悉,想用正则来提取数据,但是碰到了正则无法匹配多行的状况,之前其实也遇到,但是最后都用其他的方式将这个问题给绕过去了,今天特地在网上搜索了许多信息,最后找到了两篇文章,总结出了比较适合我的解决方法。)

举例

在这里插入图片描述

有这样一段文本,我想提取出a标签的style属性,并且想要将上一行的

作为特征也写入正则表达式中,如果写成r.complie(r’

.*Quotes to Scrape’)是什么都匹配不出来的,这里我找到了两种方法

方法一

第一种是尾部不加re.S,这种情况下 . 将不会匹配换行符,所以我们将h1和a标签之间的部分用[^.]*表示,即匹配 . 之外的符号

方法二

尾部加re.S,这种情况 . 将匹配包括换行符在内的符号,所以将h1和a标签之间的部分用.*表示

example1 = re.compile(r'

[^.]*Quotes to Scrape') example2 = re.compile(r'

.*Quotes to Scrape',re.S) print(example1.findall(r.text)) print(example2.findall(r.text))

结果

Python中正则表达式的多行匹配_第1张图片

结论

以后用正则还是只匹配单行吧,如果不得不涉及多行的话,感觉还不如beautifulsoup或者css、xpath来的方便,或者先用上述工具筛选出标签页,再用正则进行匹配。

参考文献

[1]:http://blog.sina.com.cn/s/blog_47cccb0201000b4x.html
如何用正则表达式匹配多行 slummer
[2]:https://blog.csdn.net/qq_39241986/article/details/100036180
正则表达式匹配多行的三个方法(Python)简说Python

你可能感兴趣的:(笔记)