C# 按元素拆分带有正则表达式的字符串

C# 按元素拆分带有正则表达式的字符串,c#,regex,string,split,C#,Regex,String,Split,拆分此字符串的c夏普选项是什么: "['A','B', ''],['A','D', 'F'],['A','G', 'G']" 进入字符串列表: "['A','B', '']" "['A','D', 'F']" "['A','G', 'G']" 您最好编写一个简单的解析器,而不是尝试将平衡文本与正则表达式匹配: var str = "['A','B', ''],['A','D', 'F'],['A','G', 'G']"; var topLevelLists = new List<str

拆分此字符串的c夏普选项是什么:

"['A','B', ''],['A','D', 'F'],['A','G', 'G']"
进入字符串列表:

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

您最好编写一个简单的解析器,而不是尝试将平衡文本与正则表达式匹配:

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']" ];
var str=“['A','B',”,“,'A','D','F'],['A','G','G']”;
var topLevelList=新列表();
var arrStart=-1;
var嵌套=0;
对于(int i=0;i!=str.Length;++i){
如果(str[i]='['){
如果(嵌套==0){
arrStart=i;
}
++筑巢;
}
else if(str[i]=']'){
如果(嵌套0){
//错误,开始时的“[”不匹配
}
//TopLevelList=>[“['A','B',''”,“['A','D','F'],“['A','G'”];

您可以使用这个正则表达式:
(?如果我理解,您想用另一个字符串拆分字符串。
按所述按字符串拆分字符串


对于您的问题-将其拆分为
],

如果分隔符为
],
(括号后面是逗号
]
),您可以使用一种巧妙的方法:

var parts = string.Join("]" + char.MaxValue, input
           .Split(new[] {"],"}, StringSplitOptions.None))
           .Split(char.MaxValue);
这种方法只需将方括号后的所有逗号替换为临时字符(
char.MaxValue,在本例中为
Split
),然后用该字符分割字符串。

纯正则表达式”的答案如下:

        string str = "['A','B', ''],['A','D', 'F'],['A','G', 'G']";
        string[] strs =
            Regex.Matches(str, @"(\[.*?\])")
                 .OfType<Match>()
                 .Select(m => m.Groups[0].Value)
                 .ToArray();
string str=“['A','B',”,“,'A','D','F'],['A','G','G']”;
字符串[]strs=
Regex.Matches(str,@“(\[.*?\]))
第()类
.Select(m=>m.Groups[0]。值)
.ToArray();
哪一个更能容忍括号内的组之间的不同分隔符,甚至混合分隔符,例如逗号空格或空格,而不仅仅是逗号。如果您的输入字符串定义良好,则这不会成为问题,但我更希望能够处理可能来自不同来源且可能不太一致的输入。

“['],']”
是否为有效输入?
        string str = "['A','B', ''],['A','D', 'F'],['A','G', 'G']";
        string[] strs =
            Regex.Matches(str, @"(\[.*?\])")
                 .OfType<Match>()
                 .Select(m => m.Groups[0].Value)
                 .ToArray();