除了[\s\S]外,还有其它办法能匹配“跨行”的内容吗?问题比较烂,我用个简单例子来说明下:
如下这段 HTML ,我要匹配出 Text 的内容,因为中间还插着很多其它内容,所以我不能简单的<p>(.*?)<\/p>
做匹配,必需从某个父节点找下去,才能精确定义,从父节点下去就涉及到“跨行”了
<p class="anchor">
<a href="#">Link</a>
<img src="/img/cover.jpg"><p>Text</p>
我目前知道的办法是,但听说这样效率不好,内容多了容易“卡”住,因为[\s\S],除此之外还有其它办法达到我期望的效果吗?感谢🙏
anchor">[\s\S]+.*?p>(.*?)<\/p>
1
soratadori 2017-01-19 19:19:41 +08:00 1
re.search("<p.*p>", text, re.S)
|
2
lightning1141 2017-01-19 19:22:35 +08:00 via Android 1
用 lxml 之类的库,尽量不要用正则
多行匹配加参数 re.DOTALL |
3
chroming 2017-01-19 19:27:32 +08:00 1
跨行一般是用 re.S 的
|
4
pinkman OP |
5
IanPeverell 2017-01-19 19:59:15 +08:00
我觉得用 lxml 配合 XPath 好一点,可读性和可维护性要比直接正则好一点
|
6
seki 2017-01-19 20:20:36 +08:00
用 xml parser 会更好一点,因为 html 本身不是正则的语言
|
7
imn1 2017-01-19 20:32:10 +08:00
运行效率 regex 高,开发效率 dom 高
|
8
billlee 2017-01-19 21:28:08 +08:00
HTML 不是正则语言
如果你担心 DOM 的效率有问题,可以用 SAX |