c# - 如果逗号不在两个双引号之间,则用逗号分隔

标签 c# regex

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

 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/

相关文章:

JavaScript:整数正则表达式捕获 float 的小数部分

javascript - 字符串与javascript中的排序规则比较

正则表达式捕获组

javascript - 搜索字符串中包含通配符的正则表达式

c# - 无法等待'int'异步/等待C#

c# - log4net 无法创建日志文件,发布到服务器时

c# - 具有字符串字段(或字节数组)(非值类型)的 .NET 结构是否可以提高内存效率?

c# - WPF 将内容展开到窗口外

c# - WPF:列表框显示成员

regex - 使用 Sed 将文本文件中的列右对齐