C# 按元素拆分带有正则表达式的字符串
拆分此字符串的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
"['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();