哪位大神能帮忙写一个正则表达式啊? - V2EX
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
css3
V2EX    Python

哪位大神能帮忙写一个正则表达式啊?

  •  
  •   css3 2018 年 9 月 1 日 4138 次点击
    这是一个创建于 2706 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如下 ,返回一个 html 页面(类型不是 html 是 str,不能 bs4 解析),想提取里边的 url=https://www.baidu.com/s/1dD8Hkn3 那一串链接,不知道怎么写正则,各种尝试,均不行,取不出来 ,求 v 友帮忙写一个,万谢

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>正在跳转...</title> <meta name="referrer" cOntent="no-referrer" /> <meta HTTP-EQUIV="refresh" cOntent="0; url=https://www.baidu.com/s/1dD8Hkn3"> </head> <body> </body> </html> 
    30 条回复    2018-09-03 17:51:17 +08:00
    adminii
        1
    adminii  
       2018 年 9 月 1 日
    <meta.+url=(.+)\">$
    直白写入这个不知道是不是符合要求。
    提取$1 就是地址了
    delectate
        2
    delectate  
       2018 年 9 月 1 日
    Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import re
    >>> a='''<!DOCTYPE html>
    ... <html>
    ... <head>
    ... <meta charset="utf-8">
    ... <title>正在跳转...</title>
    ... <meta name="referrer" cOntent="no-referrer" />
    ... <meta HTTP-EQUIV="refresh" cOntent="0; url=https://www.baidu.com/s/1dD8Hkn3">
    ... </head>
    ... <body>
    ... </body>
    ... </html>
    ... '''
    >>> re.findall(r'url=(.+)"',a)
    ['https://www.baidu.com/s/1dD8Hkn3']
    >>>
    css3
        3
    css3  
    OP
       2018 年 9 月 1 日
    @adminii
    @delectate 非常感谢二位,多谢!
    NickCarter
        4
    NickCarter  
       2018 年 9 月 1 日 via iPhone
    locoz
        5
    locoz  
       2018 年 9 月 1 日 via Android
    “类型不是 html 是 str ”?这话有点问题
    zaaazaa
        6
    zaaazaa  
       2018 年 9 月 1 日
    用 beautifulsoup 先取出片段再用正则会不会简单很多
    zaaazaa
        7
    zaaazaa  
       2018 年 9 月 1 日
    好吧居然不能用 bs4
    pppguest3962
        8
    pppguest3962  
       2018 年 9 月 1 日
    字符串里面如果还有标签区段,str 可以继续弄进 bs4,再做递进一步的处理的。。。



    ```
    htmlStr = """<!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>正在跳转...</title>
    <meta name="referrer" cOntent="no-referrer" />
    <meta HTTP-EQUIV="refresh" cOntent="0; url=https://www.baidu.com/s/1dD8Hkn3">
    </head>
    <body>
    </body>
    </html>
    """


    htmlStrBs4 = BeautifulSoup(htmlStr.__str__(), 'lxml')
    ```
    zhzer
        9
    zhzer  
       2018 年 9 月 1 日
    pattern = r"<meta.+? cOntent=(['"]).+?url=(.+) ?.*\1>"
    组 2 就是链接
    PulpFunction
        10
    PulpFunction  
       2018 年 9 月 1 日
    想知道楼主怎么各种尝试的,上切片美滋滋啊
    des
        11
    des  
       2018 年 9 月 1 日 via Android
    最近什么回事,看见好几个求正则的了。
    都是做爬虫,你们就不能老老实实用 beautifulsoup 吗??
    zst
        12
    zst  
       2018 年 9 月 1 日 via Android
    你把 str 丢到 bs4 里不是一样吗......
    duan602728596
        13
    duan602728596  
       2018 年 9 月 1 日 via iPhone
    python 不是有 pyquery 么
    mmnsghgn
        14
    mmnsghgn  
       2018 年 9 月 1 日
    from lxml import etree

    html_string = '''
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>正在跳转...</title>
    <meta name="referrer" cOntent="no-referrer" />
    <meta HTTP-EQUIV="refresh" cOntent="0; url=https://www.baidu.com/s/1dD8Hkn3">
    </head>
    <body>
    </body>
    </html>
    '''

    html = etree.HTML(html_string)

    url = html.xpath('//meta[3]/@content')[0].split('url=')[-1]

    print(url)


    觉得 lxml 比 bs4 舒服的多
    lu5je0
        15
    lu5je0  
       2018 年 9 月 1 日
    url=(.*)\"
    xml123
        16
    xml123  
       2018 年 9 月 1 日
    @des 可能是因为正则比较简单(门槛低)吧,我第一次写爬虫也是全程正则硬刚……
    des
        17
    des  
       2018 年 9 月 2 日 via Android
    @xml123 门槛低倒是,简单就不一定了
    ShareDuck
        18
    ShareDuck  
       2018 年 9 月 2 日 via Android   1
    每次写正则都要看“ 30 分钟入门”的路过,膜拜各路大神。
    css3
        19
    css3  
    OP
       2018 年 9 月 2 日
    @PulpFunction 切片长度一致才行吧,url 这每个长度都不一样啊
    css3
        20
    css3  
    OP
       2018 年 9 月 2 日
    @ShareDuck 我也看,但写不出来能用的正则,
    PulpFunction
        21
    PulpFunction  
       2018 年 9 月 2 日
    @css3 url 前的字符数不变,url 后面的标签也不会变
    这里的切片和你的 url 长度没关系
    哈哈 我是逗你玩的
    css3
        22
    css3  
    OP
       2018 年 9 月 2 日
    @PulpFunction 可以举例说明吗?
    richieboy
        23
    richieboy  
       2018 年 9 月 3 日
    "(?<=cOntent=\"0; url=)[^\"]*(?=\">)"
    PulpFunction
        24
    PulpFunction   div class="badges">   2018 年 9 月 3 日
    @css3 你自己数吧胸跌
    wersonliu9527
        25
    wersonliu9527  
       2018 年 9 月 3 日
    其实用 xpath 我觉得是最简单的,配合谷歌浏览器的插件 xpath helper
    xpresslink
        26
    xpresslink  
       2018 年 9 月 3 日
    楼主基本概念都不清楚么?
    只取一个 URL 确实只要用正则就可以了,用 bs4, lxml 之类方案有些重了。
    但是返回一个 html 页面(类型不是 html 是 str,不能 bs4 解析)这是什么屁话。
    css3
        27
    css3  
    OP
       2018 年 9 月 3 日
    @xpresslink 不要方,我调用一个接口,人家返回的就是一个 html 页面,类型是 str,有什么好惊讶的呢
    icris
        28
    icris  
       2018 年 9 月 3 日
    我来复制一个示例吧

    soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
    tag = soup.b
    type(tag)
    # <class 'bs4.element.Tag'>

    第一行单引号里面是不是字符串?能不能用 bs4 解析?
    xpresslink
        29
    xpresslink  
       2018 年 9 月 3 日
    @css3 我只能呵呵了
    thautwarm
        30
    thautwarm  
       2018 年 9 月 3 日
    话说我笔记记得有:

    re_exp = re.compile(r'( https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9]\.[^\s]{2,})')
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5245 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 09:26 PVG 17:26 LAX 01:26 JFK 04:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86