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

如何取出其中的 IP 地址

  •  
  •   Adia · 2017-03-02 14:42:25 +08:00 · 3048 次点击
    这是一个创建于 2828 天前的主题,其中的信息可能已经有所发展或是发生改变。

    jdbc:mysql://10.0.151.205:3306 -> 10.0.151.205:3306

    感觉用正则会很快,但是不是很懂正则。还有什么特殊的技巧吗?

    19 条回复    2017-03-04 08:39:38 +08:00
    Famio
        1
    Famio  
       2017-03-02 14:46:56 +08:00
    不懂 py 的来打混下
    不知道 py 能不能转成 string 再处理……
    fortunezhang
        2
    fortunezhang  
       2017-03-02 14:47:45 +08:00
    split(':')
    yohole
        3
    yohole  
       2017-03-02 14:48:02 +08:00
    如果字符串固定,只是 IP 会不同,那么按照字符串长度截取不失为一种方法
    windfarer
        4
    windfarer  
       2017-03-02 14:48:14 +08:00
    不是很懂正则就学一下啊, 30 分钟入门教程
    izhaohui
        5
    izhaohui  
       2017-03-02 14:49:21 +08:00 via Android
    (\d+?\.){3}\d+?\.:\d+?
    izhaohui
        6
    izhaohui  
       2017-03-02 14:49:54 +08:00 via Android
    哎呀多了个点
    grimpil
        7
    grimpil  
       2017-03-02 14:51:25 +08:00 via Android
    匹配 ip 的正则表达式,网上太多了,随便搜一下就是答案
    284716337
        8
    284716337  
       2017-03-02 14:53:07 +08:00
    正则:[\d{1,3}.]+\d{1,3}:\d{4}
    abc950309
        9
    abc950309  
       2017-03-02 14:53:45 +08:00
    re.match(r'^.+\/\/(?P<ip>\d{1,3}(\.\d{1,3}){3}).+$', 'jdbc:mysql://10.0.151.205:3306 -> 10.0.151.205:3306').group('ip')
    不能帮助你更多了 :P
    langmoe
        10
    langmoe  
       2017-03-02 14:55:26 +08:00   ❤️ 1
    print 'jdbc:mysql://10.0.151.205:3306 -> 10.0.151.205:3306'.split('->')[1].split(':')[0].strip()
    mgna17
        11
    mgna17  
       2017-03-02 14:59:31 +08:00
    'jdbc:mysql://10.0.151.205:3306'.split('/')[-1]
    Adia
        12
    Adia  
    OP
       2017-03-02 14:59:36 +08:00
    @yohole 端口号的位数也会变
    @langmoe 说错了,是 jdbc:mysql://10.0.151.205:3306 变成 10.0.151.205
    langmoe
        13
    langmoe  
       2017-03-02 15:03:06 +08:00
    @Adia 额,我以为是 docker 那种端口映射关系的字符串
    Adia
        14
    Adia  
    OP
       2017-03-02 15:03:34 +08:00
    @langmoe 搞定了,感谢。 print '''jdbc:mysql://10.0.151.205:3306'''.split('/')[-1].split(':')[0]
    ijustdo
        16
    ijustdo  
       2017-03-02 17:04:22 +08:00
    我也来个不用正则的 标准库 urlparse
    >>> import urlparse
    >>> a = 'jdbc:mysql://10.0.151.205:3306'
    >>> urlparse.urlparse(urlparse.urlparse(a).path).hostname
    '10.0.151.205'
    ijustdo
        17
    ijustdo  
       2017-03-02 17:07:35 +08:00   ❤️ 1
    这样也可以的 记住 split rsplit lsplit 是一组函数 他第二个参数非常有用的

    >>> a.rsplit(':', 1)[0].rsplit('/', 1)[-1]
    '10.0.151.205'
    xzpjerry731
        18
    xzpjerry731  
       2017-03-03 01:28:54 +08:00
    >>> ip_data

    'jdbc:mysql://10.0.151.205:3306'

    >>> rule

    '.*//(?P<ip>\\d{1,3}.\\d{1,3}.\\d{1,3}.\\d{1,3}:\\d{1,5})' #端口号有五位数的啊

    >>> re.match(rule, ip_data).group('ip')

    '10.0.151.205:3306
    mingyun
        19
    mingyun  
       2017-03-04 08:39:38 +08:00
    @ijustdo nice
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1366 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 17:34 · PVG 01:34 · LAX 09:34 · JFK 12:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.