写了一个正则,在 Atom 里面显示是可以匹配的,但是在 Pycharm 里面运行就不对了

2018-08-20 10:35:27 +08:00
 fee
我写的正则是: https://.+?(jpg|gif)
然后要匹配的地址是一串如: https:///i.imgur.com/TA3T3gU.gifhttps://i.redd.it/msevs1zayzg11.jpghttps://i.redd.it/msevs1zayzg11.jpg 。。。
在 Atom 里面试验的时候是可以匹配的。但是 pycharm 里面运行错误,我把匹配的结果打印出来显示是:['gif', 'jpg', 'jpg', 'jpg', 'jpg', 'gif', 'jpg', 'jpg'...]
也就是只匹配了(jpg|gif)
是什么情况,大家能指点下么?
2808 次点击
所在节点    Python
11 条回复
Xiaobaixiao
2018-08-20 11:05:53 +08:00
我猜你用的是 re.findall()
fee
2018-08-20 11:35:31 +08:00
@Xiaobaixiao 是的。。
wizardoz
2018-08-20 11:38:02 +08:00
( https://.+?(?:jpg|gif))
这样行不?
whusnoopy
2018-08-20 11:38:33 +08:00
因为 Python 需要用圆括号括起来你要匹配的部分,参考下面

```python
>>> re.findall(r'( https://.+?(jpg|gif))', 'https:///i.imgur.com/TA3T3gU.gifhttps://i.redd.it/msevs1zayzg11.jpghttps://i.redd.it/msevs1zayzg11.jpg')
[('https:///i.imgur.com/TA3T3gU.gif', 'gif'), ('https://i.redd.it/msevs1zayzg11.jpg', 'jpg'), ('https://i.redd.it/msevs1zayzg11.jpg', 'jpg')]
```
JHerschel
2018-08-20 11:39:12 +08:00
chroming
2018-08-20 11:40:08 +08:00
()是正则分组
ooleslie
2018-08-20 12:07:59 +08:00
@whusnoopy 为啥匹配出来的结果会多 gif 和 jpg 的结果,是因为 findall 的正则有内外两个括号么?
dartabe
2018-08-20 12:36:43 +08:00
我最近也在学这个 感觉 findall 各种坑 finditer 就是好好的
whusnoopy
2018-08-20 13:26:02 +08:00
@ooleslie 是的,Python 里的括号是分组,这里有内外两个括号就是匹配出这两个组
ooleslie
2018-08-20 14:37:22 +08:00
@dartabe 我是跟着韦炜那本书学的,讲得太粗糙了
dartabe
2018-08-20 14:47:04 +08:00
@ooleslie 前面那个答案比较好 如果用 findall 的话 就用(?: jpg|gif)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/481337

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX