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

Python 正则的问题

  •  
  •   Vvvteran · 2021-09-11 23:40:45 +08:00 · 1408 次点击
    这是一个创建于 1169 天前的主题,其中的信息可能已经有所发展或是发生改变。
    环境:py3.9.6
    部分代码:
    ip = '1.2.3.4:8080/3xx3/a.php?b=1'
    parse_obj = urlparse(ip)
    print(parse_obj)

    解析之后的结果:
    ParseResult(scheme='1.2.3.4', netloc='', path='8080/3xx3/a.php', params='', query='b=1', fragment='')

    请问各位大佬,针对这种不带 http(s)://的情况,如何使用正则提取 path 中的端口而不要之后路径呢,小白求解。
    4 条回复    2021-09-13 12:24:50 +08:00
    ccdjh
        1
    ccdjh  
       2021-09-12 22:42:40 +08:00
    直接字符串处理,是下面这意思么?

    ip = '1.2.3.4:8080/3xx3/a.php?b=1'
    >>> ip.split(":")[1].split("/")[0]
    '8080'
    >>> ip.split(":")[0]
    '1.2.3.4'
    ungrown
        2
    ungrown  
       2021-09-13 08:16:45 +08:00
    我自己常用的办法是,先 parse 一遍,检查结果的 scheme,如果缺失或者错误,再给开头加上默认的 scheme,二次 parse 。也可以用其他方式判断是否需要加协议头,方法多种多样。
    princelai
        3
    princelai  
       2021-09-13 09:54:39 +08:00
    只要端口,不要 url 和后面的路径吗?

    (?<=:)\d{1,5}
    wlsnx
        4
    wlsnx  
       2021-09-13 12:24:50 +08:00
    不带 http,你就先加上 http 再解析呗,不然 urlparse 的结果都是错的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1886 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 16:22 · PVG 00:22 · LAX 08:22 · JFK 11:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.