使用元素按正则表达式拆分字符串

时间:2014-03-31 21:57:54

标签: c# regex string split

分割此字符串的c sharp选项是什么:

"['A','B', ''],['A','D', 'F'],['A','G', 'G']"

进入字符串列表:

"['A','B', '']"
"['A','D', 'F']"
"['A','G', 'G']"

5 个答案:

答案 0 :(得分:2)

编写简单的解析器比尝试将平衡文本与正则表达式匹配更好:

var str = "['A','B', ''],['A','D', 'F'],['A','G', 'G']";
var topLevelLists = new List<string>();
var arrStart = -1;
var nesting = 0;
for (int i = 0; i != str.Length; ++i) {
    if (str[i] == '[') {
        if (nesting == 0) {
            arrStart = i;
        }
        ++nesting;
    }
    else if (str[i] == ']') {
        if (nesting <= 0) {
            // Error, ']' without matching '[' at i
            break;
        }
        --nesting;
        if (nesting == 0) {
            topLevelLists.Add(str.Substring(arrStart, i - arrStart + 1));
        }
    }
}
if (nesting > 0) {
    // Error, unmatched '[' at arrStart
}

// topLevelLists => [ "['A','B', '']", "['A','D', 'F']", "['A','G', 'G']" ];

答案 1 :(得分:1)

您可以使用此正则表达式:(?<=\]),按逗号分隔,前面有]

代码是:

String input = "['A','B', ''],['A','D', 'F'],['A','G', 'G']";
String pattern = @"(?<=\]),";

var split = Regex.Split(input, pattern);

答案 2 :(得分:0)

如果您的分隔符为],(逗号位于括号]之后),您可以使用一种棘手的方式:

var parts = string.Join("]" + char.MaxValue, input
           .Split(new[] {"],"}, StringSplitOptions.None))
           .Split(char.MaxValue);

这种方法只是将方括号后的所有逗号替换为临时字符(在本例中为char.MaxValue),然后用该字符串替换Split字符串。

答案 3 :(得分:0)

纯正的正则表达式&#34;答案是这样的:

        string str = "['A','B', ''],['A','D', 'F'],['A','G', 'G']";
        string[] strs =
            Regex.Matches(str, @"(\[.*?\])")
                 .OfType<Match>()
                 .Select(m => m.Groups[0].Value)
                 .ToArray();

更能容忍括号内组之间的不同 - 甚至混合 - 分隔符,例如逗号空格或空格而不仅仅是逗号。如果您的输入字符串定义明确,那么这不是一个问题,但我更愿意处理可能来自不同来源的输入,并且可能不太符合。

答案 4 :(得分:-2)

如果我理解,你想用另一个String拆分String。 按字符串拆分字符串按照here

所述完成

对于您的问题 - 按],

拆分