2014-03-31 89 views
0

正则表达式什么是AC尖锐选项,这个字符串分割:分割字符串与元素

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

成字符串列表:

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

是''['],']“'有效的输入吗? – Cameron

回答

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

您可以使用此正则表达式:(?<=\]), spli t之前由]开头的逗号。

的代码是:

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

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

如果我明白了,你要字符串用另一个字符串分割。 分割字符串的字符串作为描述here

对于你的问题做了 - 通过],

0

分裂它。如果你的分隔符是],(逗号自带的支架]后),您可以使用一个取巧的办法:

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

这种方法只需更换方括号与临时 CHAR(char.MaxValue在这种情况下),然后后到来的所有逗号0那个charachter的字符串。

0

“纯的正则表达式”的答案是这样的:

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

这是更宽容不同的 - 或甚至混合 - 括号内的基团之间的分隔符,如逗号空间或空间,而不是仅仅一个逗号。如果你的输入字符串定义良好,那么这不是一个问题,但我更喜欢能够处理可能来自不同来源并可能不完全符合的输入。