pppguest3962
V2EX  ›  问与答

求问针对 html 标签<em>的正则表达式的写法。。。

  •  1
     
  •   pppguest3962 · Aug 26, 2018 · 4021 views
    This topic created in 2993 days ago, the information mentioned may be changed or developed.

    实在写不出来,你看我都发贴求问了。。。。喵~

    <em class="xyz ">utxu2zy</em>
    

    求两种写法, 目的只有一个:匹配 em 标签区段的内容,

    内容有可能什么字符(包括全半角或者制表符、回车什么的)都可能会有

    1、确定是 class 属性绝对是"xyz ",z 后面有空格的正则匹配写法?

    2、class 属性无法确定,属性的内容也是什么英文数字都有可能,的正则匹配写法?

    8 replies  •  2018-08-27 06:59:30 +08:00
    yanaraika
    yanaraika
    Aug 26, 2018
    1
    1. html 文法理论上无法用非魔改正则匹配
    2. 用条件引用之类的魔改正则可以做到,随便搜一下就有 http://www.imkevinyang.com/2009/07/%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8C%B9%E9%85%8D%E5%B5%8C%E5%A5%97html%E6%A0%87%E7%AD%BE.html
    3. 但 2 的写法又臭又长,为什么不丢进 beautifulsoup 里用 CSS selector
    lazyboy
    lazyboy
    Aug 26, 2018
    2
    <(em)[^>]*?class="xyz\s"[^>]*?>[^<]*?<\/\1>
    schemesAlot
    schemesAlot
    Aug 26, 2018 via Android
    3
    .$? 加上 em ?
    lazyboy
    lazyboy
    Aug 26, 2018
    4
    <(em)[^>]*?>[^<]*?<\/\1>
    des
    des
    Aug 26, 2018 via Android
    5
    同一楼,不要用正则
    爬虫用正则很容易出问题,并且正则也难写,一旦碰到问题就傻眼了,根本没法改和维护。除非就只用一次,根本不用维护
    同一楼,老老实实用 Beautiful Soup 不行吗?
    jjplay
    jjplay
    Aug 26, 2018
    6
    不要死盯着这个 class,可以从他的父级 class 来定位
    simoncc
    simoncc
    Aug 27, 2018
    7
    用 lxml 吧,解析速度快,使用也方便,控制台选中元素右键 copy xpath 即可
    delectate
    delectate
    Aug 27, 2018
    8
    >>> import re
    >>> a='<em class="xyz ">utxu2zy</em>'
    >>> re.findall(r'<em class="xyz.?">(.*)<\/em>',a, re.I)
    >>> a='<em class="xxxxx">utxu2zy</em>'
    >>>>>> re.findall(r'<em class=".*">(.*)<\/em>',a, re.I)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5158 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:21 · PVG 14:21 · LAX 22:21 · JFK 01:21
    ♥ Do have faith in what you're doing.