
除了[\s\S]外,还有其它办法能匹配“跨行”的内容吗?问题比较烂,我用个简单例子来说明下:
如下这段 HTML ,我要匹配出 Text 的内容,因为中间还插着很多其它内容,所以我不能简单的<p>(.*?)<\/p>做匹配,必需从某个父节点找下去,才能精确定义,从父节点下去就涉及到“跨行”了
<p class="anchor"> <a href="#">Link</a> <img src="http://www.v2ex.com/img/cover.jpg"><p>Text</p> 我目前知道的办法是,但听说这样效率不好,内容多了容易“卡”住,因为[\s\S],除此之外还有其它办法达到我期望的效果吗?感谢
anchor">[\s\S]+.*?p>(.*?)<\/p> 1 soratadori 2017-01-19 19:19:41 +08:00 re.search("<p.*p>", text, re.S) |
2 lightning1141 2017-01-19 19:22:35 +08:00 via Android 用 lxml 之类的库,尽量不要用正则 多行匹配加参数 re.DOTALL |
3 chroming 2017-01-19 19:27:32 +08:00 跨行一般是用 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 |