Skip to main content
 首页 » 编程设计

python重新问题

2025年05月04日9cyq1162

我重新测试了一些pythonwebshel​​ll,他们都遇到了问题

如果我用

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 是一个优秀的库,易于使用。