V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
pinkman
V2EX  ›  Python

Python 正则匹配跨行 HTML 的办法

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

    除了[\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
    soratadori
        1
    soratadori  
       2017-01-19 19:19:41 +08:00   ❤️ 1
    re.search("<p.*p>", text, re.S)
    lightning1141
        2
    lightning1141  
       2017-01-19 19:22:35 +08:00 via Android   ❤️ 1
    用 lxml 之类的库,尽量不要用正则
    多行匹配加参数 re.DOTALL
    chroming
        3
    chroming  
       2017-01-19 19:27:32 +08:00   ❤️ 1
    跨行一般是用 re.S 的
    pinkman
        4
    pinkman  
    OP
       2017-01-19 19:39:00 +08:00
    谢谢三位, re.S 果然可行。

    @lightning1141 嗯,我知道有几个 HTML 解析的库可用,我直接写正则会不会效率更高一些呢?
    IanPeverell
        5
    IanPeverell  
       2017-01-19 19:59:15 +08:00
    我觉得用 lxml 配合 XPath 好一点,可读性和可维护性要比直接正则好一点
    seki
        6
    seki  
       2017-01-19 20:20:36 +08:00
    用 xml parser 会更好一点,因为 html 本身不是正则的语言
    imn1
        7
    imn1  
       2017-01-19 20:32:10 +08:00
    运行效率 regex 高,开发效率 dom 高
    billlee
        8
    billlee  
       2017-01-19 21:28:08 +08:00
    HTML 不是正则语言
    如果你担心 DOM 的效率有问题,可以用 SAX
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1192 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:39 · PVG 02:39 · LAX 10:39 · JFK 13:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.