V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
fee
V2EX  ›  Python

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

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