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




