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

如何用正则表达式提取[family]:后双引号内的字符串?

解决正则提取family列表内容的问题

嘿,作为正则新手遇到这种问题很正常,我来帮你梳理下问题所在,再给出可行的解决方案~

先说说你原来正则的问题

你写的@"[family]:\*"有两个关键错误:

  • [family]是字符类,它会匹配f、a、m、i、l、y中的任意单个字符,而不是匹配[family]这个完整的字面量。要匹配方括号包裹的family,需要给方括号转义,写成\[family\]。
  • \*是转义后的星号字符,它只会匹配*本身,而不是你想要的“任意内容”。这里你需要匹配双引号之间的文本,得用合适的捕获组来实现。

正确的正则表达式

针对你的测试字符串,推荐使用这个正则:

@"\[family\]:\s*""\s*(.*?)\s*"""

我来拆解下每个部分的作用:

  • \[family\]:精准匹配字面量[family],转义方括号避免被解析为字符类。
  • :\s*:匹配冒号,后面的\s*会匹配0个或多个空白字符(包括空格、制表符等),兼容字符串里的空格。
  • "":在C#的字符串中,两个双引号表示匹配一个字面量双引号。
  • \s*:匹配双引号内开头的空白(比如你字符串里" trees "前面的空格)。
  • (.*?):非贪婪模式的捕获组,会尽可能少地匹配字符,刚好捕获到引号内的目标内容(trees、colors),避免把两个引号间的所有内容都匹配成一个。
  • \s*:匹配内容后面的空白(比如" trees "后面的空格)。
  • "":匹配结尾的双引号。

C#代码示例

用这个正则提取内容的完整代码如下:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string test = "var test = \"and ( [family]: \" trees \" or [family]: \" colors \" )\"";
        MatchCollection matches = Regex.Matches(test, @"\[family\]:\s*""\s*(.*?)\s*""");
        
        foreach (Match match in matches)
        {
            // Groups[1]就是我们捕获到的目标内容
            Console.WriteLine(match.Groups[1].Value);
        }
    }
}

运行这段代码就会输出:

trees
colors

额外提示

如果你的字符串里双引号可能有转义(比如\"),那正则需要调整,但从你给出的测试字符串来看,当前的正则完全够用啦~

内容的提问来源于stack exchange,提问作者Jeya Suriya Muthumari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:55:13