首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

Python 正则匹配跨行 HTML 的办法

  •  
  •   pinkman · 2017-01-19 19:00:50 +08:00 · 2029 次点击
    这是一个创建于 1050 天前的主题,其中的信息可能已经有所发展或是发生改变。

    除了[\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>
    
    8 回复  |  直到 2017-01-19 21:28:08 +08:00
        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   2017-01-19 19:39:00 +08:00
    谢谢三位, re.S 果然可行。

    @lightning1141 嗯,我知道有几个 HTML 解析的库可用,我直接写正则会不会效率更高一些呢?
        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
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   987 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 27ms · UTC 20:53 · PVG 04:53 · LAX 12:53 · JFK 15:53
    ♥ Do have faith in what you're doing.