V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aqtata
V2EX  ›  正则表达式

请教一个正则提取问题

  •  
  •   aqtata · 2018-08-16 08:30:11 +08:00 · 3483 次点击
    这是一个创建于 2278 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我需要提取 html 代码中非 A 标签的内容应该怎么写?也就是所有">"和"<"之间的内容,但是跳过<a...>之间的内容

    <div>123<a href="#" title="abc" target="_blank">456</a>789<br/>hello</div>
    

    比如上面这段 HTML,除了 A 标签之间的"456"不提取,其他的"123"、"789"、"hello"都提取出来

    wangchonglie
        1
    wangchonglie  
       2018-08-16 08:59:56 +08:00
    我提供一个方法,第一步先将<a>xx</a>的字段找出来,然后替换掉为一个新的标签,最后再匹配>(.*?)<中的内容就可以提取到你想要的内容了。抛砖引玉,期待别人更好的回答。
    yangg
        2
    yangg  
       2018-08-16 09:19:02 +08:00
    什么语言,最好直接用 bs, pyquery 或者 cheerio 之类的
    JmmBite
        3
    JmmBite  
       2018-08-16 09:34:43 +08:00   ❤️ 3
    `([^<>]+?)<(?!\/a)`
    IssacTomatoTan
        4
    IssacTomatoTan  
       2018-08-16 09:34:45 +08:00 via Android
    /[^>]+(?=<\/a>)/
    des
        5
    des  
       2018-08-16 09:42:52 +08:00 via Android
    后排说一句,HTML 很有可能碰到不标准的,不建议用正则来匹配
    rabbbit
        6
    rabbbit  
       2018-08-16 09:47:54 +08:00
    先把<a></a>去掉再匹配,因为 a 标签里可能有别的东西,例如

    <p>DIV<a>AAA<b>BBB</b>CCC</a>DIV</p>
    aqtata
        7
    aqtata  
    OP
       2018-08-16 10:01:21 +08:00
    感谢各位大佬相助,已经解决。其实匹配所有标签也行,程序中判断一下就可以。如果完全靠正则可以用 3 楼朋友的,测试可行。
    zhaogaz
        8
    zhaogaz  
       2018-08-16 10:09:02 +08:00
    印象中 应该是要用 零宽断言 用不用贪婪 需要看你匹配到哪个 </a>了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2675 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:22 · PVG 18:22 · LAX 02:22 · JFK 05:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.