如果逗号不在两个双引号之间,请用逗号分隔

BuZ*_*uZz 3 c# regex

我想用逗号分割这样的字符串:

 field1:"value1", field2:"value2", field3:"value3,value4"
Run Code Online (Sandbox Code Playgroud)

进入一个string[]看起来像:

0     field1:"value1"
1     field2:"value2"
2     field3:"value3,value4"
Run Code Online (Sandbox Code Playgroud)

我试图这样做,Regex.Split但似乎无法解决正则表达式.

Raw*_*ing 7

例如,使用它Matches比使用它要容易得多Split

string[] asYouWanted = Regex.Matches(input, @"[A-Za-z0-9]+:"".*?""")
    .Cast<Match>()
    .Select(m => m.Value)
    .ToArray();
Run Code Online (Sandbox Code Playgroud)

虽然如果你的值(或字段!)有任何机会包含转义引号(或任何类似的棘手),那么你可能最好使用适当的CSV解析器.


如果已经在你的价值观转义引号,我认为下面的正则表达式工作-给它一个测试:

@"field3:""value3\\"",value4""", @"[A-Za-z0-9]+:"".*?(?<=(?<!\\)(\\\\)*)"""
Run Code Online (Sandbox Code Playgroud)

添加(?<=(?<!\\)(\\\\)*)的应该是确保"它停止匹配开始之前只有偶数个斜线,因为奇数个斜线意味着它被转义.