我想用逗号分割这样的字符串:
field1:"value1", field2:"value2", field3:"value3,value4"
进入一个 string[]
看起来像:
0 field1:"value1"
1 field2:"value2"
2 field3:"value3,value4"
我正在尝试使用 Regex.Split
来做到这一点,但似乎无法计算出正则表达式。
最佳答案
使用 Matches
会容易得多比Split
, 例如
string[] asYouWanted = Regex.Matches(input, @"[A-Za-z0-9]+:"".*?""")
.Cast<Match>()
.Select(m => m.Value)
.ToArray();
虽然如果您的值(或字段!)有任何可能包含转义引号(或任何类似的棘手问题),那么您最好使用适当的 CSV 解析器。
如果您确实在您的值中转义了引号,我认为以下正则表达式 工作 - 测试一下:
@"field3:""value3\\"",value4""", @"[A-Za-z0-9]+:"".*?(?<=(?<!\\)(\\\\)*)"""
添加的(?<=(?<!\\)(\\\\)*)
应该确保 "
它停止匹配前面只有偶数个斜杠,因为奇数个斜杠意味着它被转义。
关于c# - 如果逗号不在两个双引号之间,则用逗号分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13915857/