正则表达式
发现了一个这样的匹配式p = r'<img src="([^"]+\.jpg)"'
直接就能匹配出爬虫获得的 html 的 text 中所有的带有.jpg格式的链接,想请诸位大佬帮忙解析一下是如何做到的
我之前用正则的时候,各种 split 切割才拿到了自己想要的链接
[^"]+\.jpg 这一段应该是至少一次重复除了引号以外的字符对吧,然后后面跟着.jpg后缀,.用\转义为普通字符
但是前后连起来我就看不懂了{:10_319:}
另外,为什么这里不需要?去取消掉贪婪模式,不取消的话,不是应该会从匹配的第一个一直到最后一个.jpg才会结束吗?{:10_245:}
结贴速度快,有用必最佳{:10_297:} <img src="
这个就不用说了吧,图片链接的格式。
[^"]+\.jpg
[^"]字符集表示匹配非双引号,+表示至少有一个字符,\.jpg表示以.jpg结尾。
以上两条连起来就是:从<img src="开始,匹配非"号字符串,并且以.jpg结尾。
另外,为什么这里不需要?去取消掉贪婪模式,不取消的话,不是应该会从匹配的第一个一直到最后一个.jpg才会结束吗?
不用取消贪婪模式,因为[^"]限制了只能匹配非"号,所以从<img src="开始后,遇到第一个"号(与前面<img src="的"号成对)就结束了,不会再继续匹配了。 hrp 发表于 2021-2-10 01:16
这个就不用说了吧,图片链接的格式。
[^"]字符集表示匹配非双引号,+表示至少有一个字符,\.jpg表示以 ...
但是一般来讲,如果直接 p = r'<img src=".+?"' 的话,不光会匹配到 jpg 文件的链接,就连前面的 <img src="这一部分也会出现在 findall 的匹配结果里,比如说 <img src="http://example.jpg"
那么原问题中的那个是如何去掉这一部分,直接只匹配 jpg 的链接(只匹配到 http://example.jpg而没有<img src=")的呢? 本帖最后由 qq1151985918 于 2021-2-10 03:12 编辑
Daniel_Zhang 发表于 2021-2-10 02:28
但是一般来讲,如果直接 p = r'
那就是小括号的作用了,正则匹配中,可以把自己想要的部分用括号括起来,小括号起的是分组作用,默认是捕获。 qq1151985918 发表于 2021-2-10 03:07
那就是小括号的作用了,正则匹配中,可以把自己想要的部分用括号括起来。
最佳给楼上了,大佬不要见怪,楼上的回复解决了我大部分疑惑
谢谢,我现在理解了{:10_297:} Daniel_Zhang 发表于 2021-2-10 03:11
最佳给楼上了,大佬不要见怪,楼上的回复解决了我大部分疑惑
谢谢,我现在理解了
没事没事。 hrp 发表于 2021-2-10 01:16
这个就不用说了吧,图片链接的格式。
[^"]字符集表示匹配非双引号,+表示至少有一个字符,\.jpg表示以 ...
学习了 Daniel_Zhang 发表于 2021-2-10 02:28
但是一般来讲,如果直接 p = r'
漏说了一个,小括号是捕获组的意思,也就是匹配结果可以单独返回小括号匹配到的内容。
如果用findall去匹配:
如果表达式中只有一个捕获组,那findall将返回捕获组匹配的结果的列表,即[捕获组匹配结果1,捕获组匹配结果2,...]。
如果表达式中有多个捕获组,比如2个,findall将返回捕获组结果元组列表,即[(捕获组1匹配结果1, 捕获组2匹配结果1), (捕获组1匹配结果2, 捕获组2匹配结果2), ...]。 hrp 发表于 2021-2-10 08:33
漏说了一个,小括号是捕获组的意思,也就是匹配结果可以单独返回小括号匹配到的内容。
如果用findall去 ...
谢谢大佬{:10_287:}
页:
[1]