正则表达式以逗号分割,除非引用

Jus*_*tin 6 c# regex csv

除了用双引号括起来之外,在逗号(,)上拆分的正则表达式是什么?例如:

max,emily,john = ["max", "emily", "john"]
Run Code Online (Sandbox Code Playgroud)

max,"emily,kate",john = ["max", "emily,kate", "john"]
Run Code Online (Sandbox Code Playgroud)

希望在C#中使用: Regex.Split(string, "PATTERN-HERE");

谢谢.

cdh*_*wie 14

像这样的情况通常需要除正则表达式之外的其他东西.它们很漂亮,但处理这种事情的模式比它们有用的更复杂.

您可以尝试这样的事情:

public static IEnumerable<string> SplitCSV(string csvString)
{
    var sb = new StringBuilder();
    bool quoted = false;

    foreach (char c in csvString) {
        if (quoted) {
            if (c == '"')
                quoted = false;
            else
                sb.Append(c);
        } else {
            if (c == '"') {
                quoted = true;
            } else if (c == ',') {
                yield return sb.ToString();
                sb.Length = 0;
            } else {
                sb.Append(c);
            }
        }
    }

    if (quoted)
        throw new ArgumentException("csvString", "Unterminated quotation mark.");

    yield return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)

可能需要一些调整才能完全遵循CSV规范,但基本逻辑是合理的.