如何解决正则表达式仅一半时间识别引号
我最近创建了一个非常基本的正则表达式(它是新的),它可以检测javascript文件的所有字符串:
with open("file.js","r",encoding="UTF-8") as file:
re.findall(r"(\".+\"|\'.+\')",file.read())
当我创建costum js文件时,这非常完美。一旦我开始尝试使用网络抓取功能,它将不再起作用。
以下HTML:
<html>
<body>
<script src="/modules.cb8e9af2c2709a34b49b.js"></script>
<script src="/watch.4c4d39803b119ef010a3.js"></script>
<script src="/common.acad5df36574c2182d15.js"></script>
<script src="/reward4823ace7ccd.js"></script>
<script src="/polyfills.2b2696c6c54a9388e1d4.js"></script>
<script src="/index.a5be217e620cedc065e5.js"></script>
</body>
</html>
将输出
['/modules.cb8e9af2c2709a34b49b.js"></script><script src="/watch.4c4d39803b119ef010a3.js">
</script><script src="/common.acad5df36574c2182d15.js"></script><script src="/reward4823ace7ccd.js">
</script><script src="/polyfills.2b2696c6c54a9388e1d4.js"></script><script src="/index.a5be217e620cedc065e5.js']
当我通过来访问真实的网站代码时
r = requests.get(link)
re.findall(r"(\".+\"|\'.+\')",str(BeautifulSoup(r.text,"html.parser")))
但是当我将html写入我的costum文件并尝试使用第一个代码进行尝试时,它将正确输出
['/modules.cb8e9af2c2709a34b49b.js','/watch.4c4d39803b119ef010a3.js','/common.acad5df36574c2182d15.js','/reward4823ace7ccd.js','/polyfills.2b2696c6c54a9388e1d4.js','/index.a5be217e620cedc065e5.js']
即使两次都应该读取数据正则表达式的类型都是字符串。我已经尝试过不转换aynthing或有意将所有内容转换为字符串,但输出始终是相同的。
那是为什么?
如果有帮助,这也是我要抓取的(测试)链接(请确保html更复杂,尽管在这种情况下不应该更改正则表达式的行为:“ https://lolesports.com/schedule? Leagues = european-masters,lcs,lck“
解决方法
正则表达式"(\".+\"|\'.+\')"
继续匹配2 "
或'
之间的任何字符。例如,这包括-
以下子字符串中的"/modules.cb8e9af2c2709a34b49b.js"
和"></script><script src="
:
<script src="/modules.cb8e9af2c2709a34b49b.js"></script><script src="...
您应该使用re.finditer
或对正则表达式添加限制,而不要使用.+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。