You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#正则表达式匹配双引号间内容(含转义双引号)

解决C#正则匹配带转义双引号的字符串问题

没问题,我帮你搞定这个需求!要匹配两个双引号之间的内容(包括转义双引号),同时分隔开逗号分隔的不同项,这个正则的关键是正确处理转义字符,避免把转义的双引号当成字符串结束标记。

核心正则表达式

在C#里,推荐用逐字字符串来写正则,避免转义混乱,直接用这个:

@"""((?>\\.|[^""\\])*)"""

正则规则拆解

我给你拆解下每个部分的作用,方便你理解:

  • @""": 匹配开头的双引号(逐字字符串里用两个双引号表示一个实际双引号)
  • (?>\\.|[^""\\])*: 这是匹配的核心,用原子组(?>...)避免不必要的回溯,提升效率:
    • \\.: 匹配任意转义字符(包括转义双引号\"、转义反斜杠\\等)
    • [^""\\]: 匹配不是双引号也不是反斜杠的普通字符
    • *: 表示前面的模式可以重复0次或多次,覆盖引号内的所有内容
  • ): 捕获组,用来提取引号内的实际内容
  • @""": 匹配结尾的双引号

C#代码示例

直接看怎么用这个正则提取内容:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string testString = "\"first \\\"value\\\\\\\\\", \"second, value\", \"third value\"";
        string pattern = @"""((?>\\.|[^""\\])*)""";
        
        foreach (Match match in Regex.Matches(testString, pattern))
        {
            Console.WriteLine(match.Groups[1].Value);
        }
    }
}

测试结果

运行上面的代码,会输出你期望的结果:

  • first "value\\
  • second, value
  • third value

不管引号里有转义字符还是逗号,都能正确提取每一项的内容,完全符合你的需求。

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

火山引擎 最新活动