首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

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

  •  
  •   fee · 2018-08-20 10:35:27 +08:00 · 1652 次点击
    这是一个创建于 428 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我写的正则是: 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)
    是什么情况,大家能指点下么?
    11 回复  |  直到 2018-08-20 14:47:04 +08:00
        1
    Xiaobaixiao   2018-08-20 11:05:53 +08:00   ♥ 1
    我猜你用的是 re.findall()
        2
    fee   2018-08-20 11:35:31 +08:00
    @Xiaobaixiao 是的。。
        3
    wizardoz   2018-08-20 11:38:02 +08:00   ♥ 1
    ( https://.+?(?:jpg|gif))
    这样行不?
        4
    whusnoopy   2018-08-20 11:38:33 +08:00   ♥ 2
    因为 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')]
    ```
        5
    JHerschel   2018-08-20 11:39:12 +08:00   ♥ 2
        6
    chroming   2018-08-20 11:40:08 +08:00 via Android
    ()是正则分组
        7
    ooleslie   2018-08-20 12:07:59 +08:00
    @whusnoopy 为啥匹配出来的结果会多 gif 和 jpg 的结果,是因为 findall 的正则有内外两个括号么?
        8
    dartabe   2018-08-20 12:36:43 +08:00
    我最近也在学这个 感觉 findall 各种坑 finditer 就是好好的
        9
    whusnoopy   2018-08-20 13:26:02 +08:00   ♥ 1
    @ooleslie 是的,Python 里的括号是分组,这里有内外两个括号就是匹配出这两个组
        10
    ooleslie   2018-08-20 14:37:22 +08:00
    @dartabe 我是跟着韦炜那本书学的,讲得太粗糙了
        11
    dartabe   2018-08-20 14:47:04 +08:00
    @ooleslie 前面那个答案比较好 如果用 findall 的话 就用(?: jpg|gif)
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   992 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 20:08 · PVG 04:08 · LAX 13:08 · JFK 16:08
    ♥ Do have faith in what you're doing.