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

正则表达式匹配仅在status:failed前的name字段(适配含引号场景)

解决方案

核心问题拆解

你遇到的两个关键问题:

  1. 正则匹配到了最开头的name而非紧邻failed的字段——原正则未限定匹配范围,导致跨JSON对象匹配。
  2. 含转义引号的name值无法正确捕获——原正则用[^"]+直接排除所有引号,未考虑JSON字符串的转义规则。

修正后的正则表达式

(?s)\{"name":"((?:\\.|[^"\\])+)"(?:(?!\}).)*?"status":"failed"

正则规则说明

  • (?s):启用单行模式,让.可以匹配换行符,适配多行格式的JSON
  • \{:匹配JSON对象的起始大括号,确保只在当前失败任务的对象内匹配
  • "name":"((?:\\.|[^"\\])+)":正确捕获带转义引号的name值:
    • (?:\\.|[^"\\])+:匹配规则为「要么是转义字符(如\"),要么是非引号、非反斜杠的普通字符」,完美兼容JSON字符串的格式要求
  • (?:(?!\}).)*?:非贪婪匹配任意字符,但不会跨过下一个大括号,严格限定在当前JSON对象内,避免误匹配其他对象的name
  • "status":"failed":定位目标失败状态,确保匹配的是紧邻它的name

测试示例

针对如下JSON片段:

{"name":"Backup Data","status":"success"},{"name":"Deploy \"v2.0\" Service","status":"failed"}

捕获组1会得到:Deploy \"v2.0\" Service(若需要去除转义,可在后续代码中用对应语言的字符串处理方法,比如Python的ast.literal_eval)

额外建议

如果场景允许,优先使用JSON解析器处理而非正则——比如Python中可将JSON字符串转成列表/字典,遍历找到status为failed的项直接提取name值,这种方式比正则更稳定,无需手动处理转义问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:15:58