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

本文探讨了使用正则表达式匹配多行文本的两种有效方法,一是通过[^.]*排除换行符,二是利用re.S使.匹配包括换行符在内的所有字符。并对比了正则与BeautifulSoup、CSS、XPath在复杂网页解析中的适用性。

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

举例

在这里插入图片描述

有这样一段文本,我想提取出a标签的style属性,并且想要将上一行的<h1>作为特征也写入正则表达式中,如果写成r.complie(r’<h1>.*<a href="/" style="(.*?)">Quotes to Scrape’)是什么都匹配不出来的,这里我找到了两种方法

方法一

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

方法二

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

example1 = re.compile(r'<h1>[^.]*<a href="/" style="(.*?)">Quotes to Scrape</a>')
example2 = re.compile(r'<h1>.*<a href="/" style="(.*?)">Quotes to Scrape</a>',re.S)
print(example1.findall(r.text))
print(example2.findall(r.text))

结果

在这里插入图片描述

结论

以后用正则还是只匹配单行吧,如果不得不涉及多行的话,感觉还不如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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值