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
fyyz
V2EX  ›  Python

Python 的正则是不是有匹配的字符串的最大长度的限制啊

  •  
  •   fyyz · 2017-04-05 00:10:50 +08:00 · 3702 次点击
    这是一个创建于 2820 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有个需求,匹配 HTML 里的注释。以下两段代码:

    #!/usr/bin/env python3
    
    import re
    
    html = """
    <html>
            <something>
            </something>
            <!--
                    aaa
                    bbb
                    ccc
            -->
            111<!--
                    ccc
                    bbb
                    aaa
            -->11
    </html>
    """
    
    item = re.findall(r"(?<=<!--).+?(?=-->)",html,re.S)
    for i in item:
            print(i)
    

    上面这个可以匹配成功。

    这个就匹配不出来:

    #!/usr/bin/env python3
    
    import requests
    import re
    import json
    import sys
    
    s = requests.session()
    
    params = {
            "ie" : "utf-8",
            "kw" : "linux"
    }
    page = s.get("http://tieba.baidu.com/f",params = params)
    text = page.text
    
    tiezi_data = re.findall(r"(?<=<!--).+?(?=-->)",text,re.S)
    print(tiezi_data)
    print(len(tiezi_data))
    

    贴吧的页面里有大量注释,注释里有大量的信息,可以在浏览器里看到。但是我的正则只能匹配到第一个,我不知道为什么。

    5 条回复    2017-04-05 16:29:06 +08:00
    zsz
        1
    zsz  
       2017-04-05 00:49:49 +08:00
    在 text 字符串中搜索下 <!-- , 只有 <!--STATUS OK-->, 好像服务器直接返回给你的内容中并没有什么注释,
    页面中之所以能看到,应该是前端异步获取的内容,你再仔细确认下吧
    fyyz
        2
    fyyz  
    OP
       2017-04-05 00:51:07 +08:00 via Android
    @zsz 我刚刚才看到,现在已经关电脑了,明天再看看。
    IanPeverell
        3
    IanPeverell  
       2017-04-05 08:12:42 +08:00
    贴吧那部分内容是 script 渲染上去的,直接 html 是没有内容的,而且即使有长度限制,也是直接报错的
    ijustdo
        4
    ijustdo  
       2017-04-05 09:25:25 +08:00
    ```Python
    html = """
    <html>
    <something>
    </something>
    <!--
    aaa
    bbb
    ccc
    -->
    111<!--
    ccc
    bbb
    aaa
    -->11
    </html>
    """
    import re
    re.findall(r"(?is)(?:\<\!\-\-)(.+?)(?:\-\-\>)",html)
    ['\n aaa\n bbb\n ccc\n ', '\n ccc\n bbb\n aaa\n ']

    ```
    kghch
        5
    kghch  
       2017-04-05 16:29:06 +08:00
    除了异步加载的问题,另外匹配注释可以用 bs4 。 http://stackoverflow.com/questions/33138937/how-to-find-all-comments-with-beautiful-soup
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5797 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:45 · PVG 10:45 · LAX 18:45 · JFK 21:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.