Python Regex只识别一半的引号
我最近创建了一个非常基本的正则表达式(新的正则表达式),它检测javascript文件的所有字符串:Python Regex只识别一半的引号,python,regex,beautifulsoup,python-requests,Python,Regex,Beautifulsoup,Python Requests,我最近创建了一个非常基本的正则表达式(新的正则表达式),它检测javascript文件的所有字符串: with open("file.js", "r", encoding="UTF-8") as file: re.findall(r"(\".+\"|\'.+\')", file.read()) 当我创建costum js文件时,这个功能非常有效。当我开始尝试使用网络垃圾时,它就不起作用了
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>
但是,当我将html写入costum文件并尝试使用第一个代码时,它将正确输出
['/modules.cb8e9af2c2709a34b49b.js', '/watch.4c4d39803b119ef010a3.js', '/common.acad5df36574c2182d15.js',
'/reward4823ace7ccd.js', '/polyfills.2b2696c6c54a9388e1d4.js', '/index.a5be217e620cedc065e5.js']
即使两次regex应该读取的数据类型都是字符串。我已经尝试过不转换aynthing或者有意地将所有内容转换成字符串,但是输出总是一样的
为什么呢
此外,如果有帮助的话,这里是我正在抓取的(测试)链接(确保html更复杂,尽管在这种情况下这不应该改变regex的行为:“https://lolesports.com/schedule?leagues=european-masters,lcs,lck“正则表达式”(\“+\”。+\”)“
继续匹配2“
或”
。例如,这包括两者-
”/modules.cb8e9af2c2709a34b49b.js“
和”>您的问题理所当然地认为str(BeautifulSoup(r.text,“html.parser”)返回的值
与您显示的HTML文件相同。但这种假设显然没有给出预期的结果。这表明这两个文件并不像您想象的那样相似。正如我在上一段中所说的那样,我仍然希望它能够工作,因为字符串应该是相同的,只是周围有一些文本。正如我发现的那样在我们看来,html的格式是(也是)我的问题(正如我在下面回答的)。+
是一个贪婪的,使用+?
或*?
惰性量词。我确实发现了问题(尽管我还不知道解决方案):代码有点有效,但只有当字符串在不同的行中时才有效。只要它们在同一行中,它就不会像intendet一样工作,整个字符串将从第一个找到的匹配项转到同一行中的最后一个匹配项。(这也解释了为什么我的示例不起作用,因为当我在editro中格式化代码时,网站在一行中引用了所有脚本)
r = requests.get(link)
re.findall(r"(\".+\"|\'.+\')", str(BeautifulSoup(r.text, "html.parser")))
['/modules.cb8e9af2c2709a34b49b.js', '/watch.4c4d39803b119ef010a3.js', '/common.acad5df36574c2182d15.js',
'/reward4823ace7ccd.js', '/polyfills.2b2696c6c54a9388e1d4.js', '/index.a5be217e620cedc065e5.js']
<script src="/modules.cb8e9af2c2709a34b49b.js"></script><script src="...