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
a251922581
V2EX  ›  Python

Python3 里 'ver="(.*?)"'表达式 不能像 grep -o -E 'ver="(.*?)"'只返回()里匹配的数据?

  •  
  •   a251922581 · 2017-07-11 22:13:02 +08:00 · 2227 次点击
    这是一个创建于 2452 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ()表示只匹配括号里的
    .*? 任意字符,非贪婪模式
    grep -o 只返回匹配的
    grep -E 扩展正则
    数据都是
    fjiojfiawejfoijf ver="226800"fjiajfioafjio
    Python 3 正则要只返回 226800,如下代码返回了 ver="226800"

    pattern = re.compile( 'ver="(.*?)"')
    string = 'fjiojfiawejfoijf ver="226800"fjiajfioafjio'
    print(re.search(pattern, string).group())

    不知错在哪里,多谢指点。。
    11 条回复    2017-07-12 11:08:59 +08:00
    glasslion
        1
    glasslion  
       2017-07-11 22:21:01 +08:00
    groups()
    glasslion
        2
    glasslion  
       2017-07-11 22:22:51 +08:00
    或 group(0)
    yucongo
        3
    yucongo  
       2017-07-11 23:16:09 +08:00   ❤️ 1
    In [53]: astring = 'fjiojfiawejfoijf ver="226800"fjiajfioafjio'

    In [54]: re.search('(?<=ver=\").*?(?=\")', astring).group()
    Out[54]: '226800'
    264768502
        4
    264768502  
       2017-07-11 23:24:43 +08:00 via Android
    pattern.search(string).group(1)
    hugo775128583
        5
    hugo775128583  
       2017-07-12 00:02:01 +08:00 via Android
    group
    daya0576
        6
    daya0576  
       2017-07-12 01:18:25 +08:00 via iPad
    全部匹配: group(0)
    括号中的匹配:group(1)

    相当于 perl 中的$0 $1
    :p
    ipwx
        7
    ipwx  
       2017-07-12 08:41:31 +08:00
    楼上的真是好脾气。遇到这种问题应该先甩一个 docs.python.org 的链接,精确到函数。

    https://docs.python.org/3/library/re.html#re.match.group
    billion
        8
    billion  
       2017-07-12 08:56:02 +08:00   ❤️ 1
    Python 不需要用 compile
    result = re.search('ver="(.*?)"', string).group(1)
    aa825aa
        9
    aa825aa  
       2017-07-12 09:35:54 +08:00
    我就喜欢用 findall
    flyingghost
        10
    flyingghost  
       2017-07-12 10:45:44 +08:00   ❤️ 1
    用 python 应该熟读 python 文档,group 可破。
    用正则应该熟读正则文档,(?<=exp)可破。

    提问建议使用“ xxx 如何 yyy ”比较安全,而不是“ xxx 不能 yyy 吗?”,会激怒一大堆簇拥者。
    对于一门尚未掌握的技术,起码保持一点敬畏吧。。。
    okletswin
        11
    okletswin  
       2017-07-12 11:08:59 +08:00
    @flyingghost 赞一个, 楼上的太好脾气了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1546 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:14 · PVG 01:14 · LAX 10:14 · JFK 13:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.