V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
p1956
V2EX  ›  程序员

正则问题,来看看吧

  •  
  •   p1956 · 2023-08-07 09:01:52 +08:00 · 2108 次点击
    这是一个创建于 506 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <tr><td>532775<td><i>NULL</i><td><i>NULL</i><td><i>NULL</i><td> 林萍 <td> <td> <td> h0017byu1hc <td> 1049 <td> <td>62588<td> 001 <td><i>NULL</i><td>00532775 <td><i>NULL</i><tr><td>532858<td><i>NULL</i><td><i>NULL</i><td><i>NULL</i><td> 林欣彤 <td> <td> <td> i00178fmn0l <td> 1049 <td> <td>25685<td> 003F2pV <td><i>NULL</i><td>TX0 <td><i>NULL</i></table>

    正则提取 td 里面的内容(含空值),要通过 https://tool.oschina.net/regex/ 测试。<td>(.+?)<只有 18 个结果,怎么提取出正确的 30 个结果
    21 条回复    2023-08-07 22:32:49 +08:00
    retanoj
        1
    retanoj  
       2023-08-07 09:10:13 +08:00
    html 不建议用正则扣
    73P2OdTjK6t29nk1
        2
    73P2OdTjK6t29nk1  
       2023-08-07 09:14:00 +08:00
    这种事交给 chatgpt 不是第一选择吗
    zpj520wzm
        3
    zpj520wzm  
       2023-08-07 09:16:15 +08:00
    td>(.+?)<
    8355
        4
    8355  
       2023-08-07 09:16:19 +08:00
    正则是效率最低的方式,标准 html 解析是最好的方案
    Great233
        5
    Great233  
       2023-08-07 09:16:21 +08:00
    td>.*?<
    这样?
    p1956
        6
    p1956  
    OP
       2023-08-07 09:16:46 +08:00
    @okaykai chatgpt 解决不了
    chnwillliu
        7
    chnwillliu  
       2023-08-07 09:16:49 +08:00 via Android
    <td>(.+?)(?=<)

    用断言,否则后面的尖括号会被吃了
    dayeye2006199
        8
    dayeye2006199  
       2023-08-07 09:16:52 +08:00 via Android
    建议做个树结构,然后框个迭代的条件过一遍就行
    cloudfox
        9
    cloudfox  
       2023-08-07 09:16:54 +08:00
    (?<=<td>)(.*?)(?=<td>)
    shiyuu
        10
    shiyuu  
       2023-08-07 09:22:53 +08:00
    chatgpt 帮你完成
    newaccount
        11
    newaccount  
       2023-08-07 09:23:19 +08:00
    <td>([^<]*)<
    p1956
        12
    p1956  
    OP
       2023-08-07 09:23:52 +08:00
    @chnwillliu 这个可以,谢谢
    newaccount
        13
    newaccount  
       2023-08-07 09:25:07 +08:00
    @newaccount 忽略我,原始数据不是标准 td 嵌套
    SuujonH
        14
    SuujonH  
       2023-08-07 09:25:18 +08:00
    善用 chatgpt ,不行就多问问

    <td>([^<]*)
    Seanfuck
        15
    Seanfuck  
       2023-08-07 09:31:54 +08:00
    3 楼 5 楼的都可以,奇怪了不能用<td>开头的
    davin
        16
    davin  
       2023-08-07 09:45:49 +08:00
    你这也不是标准的 HTML 吧,不遵循嵌套规则,结束标签呢?
    zpj520wzm
        17
    zpj520wzm  
       2023-08-07 10:19:45 +08:00
    @Seanfuck 楼主一开始的正则,后面会吞掉一个<,就匹配不了<td>开头了,间隔,所以只能匹配一半,就是 15 个。做法要么这样写,要么就是 chnwillliu 说的后向断言引用
    herozzm
        18
    herozzm  
       2023-08-07 10:20:54 +08:00
    测试正则请用: https://regex101.com/
    loveDiu4ever
        19
    loveDiu4ever  
       2023-08-07 10:57:32 +08:00
    td 里面套 td 真有人愿意给他写正则啊
    kaedeair
        20
    kaedeair  
       2023-08-07 17:21:35 +08:00
    td>(.+?)<
    为啥会漏最后一个是因为最后一个"<"把最后<td>的"<"吃了
    mikewang
        21
    mikewang  
       2023-08-07 22:32:49 +08:00
    不要使用正则表达式匹配 HTML: https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags

    HTML 不是正则文法语言,因此该语言不能被正则表达式“正确地”解析。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3480 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 04:33 · PVG 12:33 · LAX 20:33 · JFK 23:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.