我重新测试了一些pythonwebshelll,他们都遇到了问题
如果我用
a=re.findall(r"""<ul>[\s\S]*?<li><a href="(?P<link>[\s\S]*?)"[\s\S]*?<img src="(?P<img>[\s\S]*?)"[\s\S]*?<br/>[\s\S]*?</li>[\s\S]*?</li>[\s\S]*?</li>[\s\S]*?</ul>""",html)
print a
没关系
但是如果我使用
a=re.findall(r"""<ul>[\s\S]*?<li><a href="(?P<link>[\s\S]*?)"[\s\S]*?<img src="(?P<img>[\s\S]*?)"[\s\S]*?<br/>[\s\S]*?</li>[\s\S]*?</li>[\s\S]*?</li>[\s\S]*?</ul>d""",html)
print a
它会阻塞服务器并一直等待,就像服务器死机一样,我也在 regexbuddy 上测试过
两个代码段唯一的区别是在第二个代码段的regur表达式的末尾,我添加了一个字符'd'
谁能解释为什么会这样
请您参考如下方法:
表达式 [\s\S]*? 可以匹配任意数量的任何内容。在匹配失败的情况下,这可能会导致大量回溯。如果您更具体地了解可以匹配和不能匹配的内容,那么匹配会更快失败。
此外,我建议您为此使用 HTML 解析器而不是正则表达式。 Beautiful Soup 是一个优秀的库,易于使用。
