鱼C论坛

 找回密码
 立即注册
查看: 1554|回复: 8

[已解决]正则表达式

[复制链接]
发表于 2021-2-10 00:07:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发现了一个这样的匹配式
p = r'<img src="([^"]+\.jpg)"'

直接就能匹配出爬虫获得的 html 的 text 中所有的带有.jpg格式的链接,想请诸位大佬帮忙解析一下是如何做到的

我之前用正则的时候,各种 split 切割才拿到了自己想要的链接

[^"]+\.jpg 这一段应该是至少一次重复除了引号以外的字符对吧,然后后面跟着.jpg后缀,.用\转义为普通字符

但是前后连起来我就看不懂了

另外,为什么这里不需要?去取消掉贪婪模式,不取消的话,不是应该会从匹配的第一个一直到最后一个.jpg才会结束吗?

结贴速度快,有用必最佳
最佳答案
2021-2-10 01:16:06
<img src="

这个就不用说了吧,图片链接的格式。
[^"]+\.jpg

[^"]字符集表示匹配非双引号,+表示至少有一个字符,\.jpg表示以.jpg结尾。
以上两条连起来就是:从<img src="开始,匹配非"号字符串,并且以.jpg结尾。

另外,为什么这里不需要?去取消掉贪婪模式,不取消的话,不是应该会从匹配的第一个一直到最后一个.jpg才会结束吗?

不用取消贪婪模式,因为[^"]限制了只能匹配非"号,所以从<img src="开始后,遇到第一个"号(与前面<img src="的"号成对)就结束了,不会再继续匹配了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-10 01:16:06 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
<img src="

这个就不用说了吧,图片链接的格式。
[^"]+\.jpg

[^"]字符集表示匹配非双引号,+表示至少有一个字符,\.jpg表示以.jpg结尾。
以上两条连起来就是:从<img src="开始,匹配非"号字符串,并且以.jpg结尾。

另外,为什么这里不需要?去取消掉贪婪模式,不取消的话,不是应该会从匹配的第一个一直到最后一个.jpg才会结束吗?

不用取消贪婪模式,因为[^"]限制了只能匹配非"号,所以从<img src="开始后,遇到第一个"号(与前面<img src="的"号成对)就结束了,不会再继续匹配了。

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +3 收起 理由
Daniel_Zhang + 2 + 2 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-2-10 02:28:32 | 显示全部楼层
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=")的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-10 03:07:51 From FishC Mobile | 显示全部楼层
本帖最后由 qq1151985918 于 2021-2-10 03:12 编辑
Daniel_Zhang 发表于 2021-2-10 02:28
但是一般来讲,如果直接 p = r'


那就是小括号的作用了,正则匹配中,可以把自己想要的部分用括号括起来,小括号起的是分组作用,默认是捕获。

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +3 收起 理由
Daniel_Zhang + 2 + 2 + 3 谢谢!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2021-2-10 03:11:48 | 显示全部楼层
qq1151985918 发表于 2021-2-10 03:07
那就是小括号的作用了,正则匹配中,可以把自己想要的部分用括号括起来。

最佳给楼上了,大佬不要见怪,楼上的回复解决了我大部分疑惑

谢谢,我现在理解了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-10 03:12:19 From FishC Mobile | 显示全部楼层
Daniel_Zhang 发表于 2021-2-10 03:11
最佳给楼上了,大佬不要见怪,楼上的回复解决了我大部分疑惑

谢谢,我现在理解了

没事没事。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-10 08:33:14 | 显示全部楼层
hrp 发表于 2021-2-10 01:16
这个就不用说了吧,图片链接的格式。

[^"]字符集表示匹配非双引号,+表示至少有一个字符,\.jpg表示以 ...

学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-10 08:33:34 From FishC Mobile | 显示全部楼层
Daniel_Zhang 发表于 2021-2-10 02:28
但是一般来讲,如果直接 p = r'

漏说了一个,小括号是捕获组的意思,也就是匹配结果可以单独返回小括号匹配到的内容。
如果用findall去匹配:
如果表达式中只有一个捕获组,那findall将返回捕获组匹配的结果的列表,即[捕获组匹配结果1,捕获组匹配结果2,...]。
如果表达式中有多个捕获组,比如2个,findall将返回捕获组结果元组列表,即[(捕获组1匹配结果1, 捕获组2匹配结果1), (捕获组1匹配结果2, 捕获组2匹配结果2), ...]。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-2-10 12:05:12 | 显示全部楼层
hrp 发表于 2021-2-10 08:33
漏说了一个,小括号是捕获组的意思,也就是匹配结果可以单独返回小括号匹配到的内容。
如果用findall去 ...

谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 14:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表