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

Python正则匹配workorder标签被内部右尖括号提前截断问题求解

问题原因

你当前使用的正则存在两个核心问题:

  1. 非贪婪匹配.*?会在遇到第一个>时就终止,不会区分这个>是在属性内部还是标签结束位
  2. 末尾的$强制匹配行尾,限制了不同闭合格式的适配性

解决方法

正确正则表达式(Python环境)

\s*(<workorder(?:[^">]|"[^"]*")*?\/?>)\s*

仅需开启单行/DOTALL模式即可,不需要开启多行模式。

正则逻辑说明

  • \s*:匹配标签前的任意空白字符(空格、换行、制表符均可,兼容标签前有缩进的情况)
  • <workorder:匹配workorder标签的开头
  • (?:[^">]|"[^"]*")*?:非捕获组,循环匹配两类内容,直到遇到标签结束符:
    • [^">]:匹配既不是双引号也不是>的任意字符
    • "[^"]*":匹配一对双引号包裹的所有内容,会跳过属性值内部的所有<、>等符号,不会误判结束位
    • 非贪婪模式*?保证找到第一个符合要求的结束符就停止
  • \/?>:匹配标签结束符,兼容普通闭合>和自闭合/>两种格式

适配性说明

该正则可以覆盖你提到的所有三种数据格式:

  • 末尾>紧邻双引号的场景
  • 末尾>紧邻斜杠的自闭合场景
  • 斜杠和>单独占一行的场景

匹配结果的第一个捕获组就是完整的workorder开始标签内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:12:01