python - 正则表达式只识别一半时间的引号
问题描述
我最近创建了一个非常基本的正则表达式(它是新的),它检测 javascript 文件的所有字符串:
with open("file.js", "r", encoding="UTF-8") as file:
re.findall(r"(\".+\"|\'.+\')", file.read())
当我创建我的服装 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']
即使两次数据正则表达式应该读取的类型都是字符串。我已经尝试不转换任何东西或故意将所有内容转换为字符串,但输出始终相同。
这是为什么?
另外,如果有帮助,这里是我正在抓取的(测试)链接(确保 html 更复杂,尽管这不应该改变正则表达式在这种情况下的行为:“https://lolesports.com/schedule?leagues=european -大师,LCS,LCK”
解决方案
正则表达式"(\".+\"|\'.+\')"
继续匹配 2"
或'
. 这包括例如 -
"/modules.cb8e9af2c2709a34b49b.js"
和"></script><script src="
以下子字符串:
<script src="/modules.cb8e9af2c2709a34b49b.js"></script><script src="...
您应该对正则表达式使用re.finditer
或添加限制,而不是.+
推荐阅读
- json - 如何为 Apache Flink 创建自定义 POJO
- android - 关于 Android 的 Firebase 身份验证 SHA1 的问题
- powershell - 任务计划 | 我正在尝试安排一个 .ps1 文件,但每次调度程序运行时都会出现一个弹出窗口“你想如何打开这个文件?”
- python - 如何将一个扩展名的一个目录的所有文件合并到一个文件夹中
- android - Gradle 构建过程失败
- flutter - 地图未更新呈现的有状态子小部件
- angular - 动态添加行时,PrimeNG 表头与滚动条未对齐
- apache-spark - Unnest 复杂的 pyspark 模式
- javascript - 从 modal-React native 更新信息
- python-3.x - 使用 FLASK 部署模型时出现此错误:TypeError: Input data can not be a list