You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则表达式问题:提取<li></li>标签外的字符串

修正正则表达式提取非
  • 标签包裹的内容
  • 原正则的问题

    你之前使用的^(?!<li>.*$).*(?<!</li>)是基于整行匹配的规则,仅能识别完全不包含<li>开头或</li>结尾的整行内容。一旦<li>标签前后附带表情、文本等额外内容(比如😀<li>列表项</li>😃),整行不符合规则,导致这些非<li>包裹的内容也会被遗漏。

    修正方案(推荐用替换思路)

    更高效的方式是替换掉所有完整的<li>...</li>块,剩余内容就是你需要的非包裹文本:

    • 正则表达式:<li>.*?</li>
    • 关键说明:
      • .*?使用非贪婪匹配,避免误匹配多个<li>标签(比如同时匹配<li>项1</li><li>项2</li>整个内容)
      • 若处理多行文本,需开启跨行匹配模式:
        • Python:添加re.DOTALL修饰符
        • JavaScript:添加s修饰符
        • 其他语言:开启对应的多行/单行匹配选项

    示例演示

    输入文本:

    这是普通文本
    <div>div内的内容</div>
    😀<li>列表项1</li>😃
    <li>列表项2</li>
    这是li外的另一行文本
    

    执行替换后输出:

    这是普通文本
    <div>div内的内容</div>
    😀😃
    
    这是li外的另一行文本
    

    若需直接提取(非替换)

    如果一定要用提取逻辑,可使用正向/反向否定预查匹配所有不在<li>和</li>之间的内容,但这种方式对复杂HTML兼容性较差,仅推荐用于简单场景:

    (?<!<li>.*).*?(?!.*</li>)
    

    内容的提问来源于stack exchange,提问作者Jerykso

    相关产品推荐
    方舟 Agent Plan

    超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

    最近更新时间:2026.08.13 11:33:46