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

2017-04-05 00:10:50 +08:00
 fyyz

我有个需求,匹配 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))

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

3677 次点击
所在节点    Python
5 条回复
zsz
2017-04-05 00:49:49 +08:00
在 text 字符串中搜索下 <!-- , 只有 <!--STATUS OK-->, 好像服务器直接返回给你的内容中并没有什么注释,
页面中之所以能看到,应该是前端异步获取的内容,你再仔细确认下吧
fyyz
2017-04-05 00:51:07 +08:00
@zsz 我刚刚才看到,现在已经关电脑了,明天再看看。
IanPeverell
2017-04-05 08:12:42 +08:00
贴吧那部分内容是 script 渲染上去的,直接 html 是没有内容的,而且即使有长度限制,也是直接报错的
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
2017-04-05 16:29:06 +08:00
除了异步加载的问题,另外匹配注释可以用 bs4 。 http://stackoverflow.com/questions/33138937/how-to-find-all-comments-with-beautiful-soup

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/352528

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX