正则表达式什么是AC尖锐选项,这个字符串分割:分割字符串与元素
"['A','B', ''],['A','D', 'F'],['A','G', 'G']"
成字符串列表:
"['A','B', '']"
"['A','D', 'F']"
"['A','G', 'G']"
正则表达式什么是AC尖锐选项,这个字符串分割:分割字符串与元素
"['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']" ];
您可以使用此正则表达式:(?<=\]),
spli t之前由]
开头的逗号。
的代码是:
String input = "['A','B', ''],['A','D', 'F'],['A','G', 'G']";
String pattern = @"(?<=\]),";
var split = Regex.Split(input, pattern);
如果我明白了,你要字符串用另一个字符串分割。 分割字符串的字符串作为描述here
对于你的问题做了 - 通过],
分裂它。如果你的分隔符是],
(逗号自带的支架]
后),您可以使用一个取巧的办法:
var parts = string.Join("]" + char.MaxValue, input
.Split(new[] {"],"}, StringSplitOptions.None))
.Split(char.MaxValue);
这种方法只需更换方括号与临时 CHAR(char.MaxValue
在这种情况下),然后后到来的所有逗号0那个charachter的字符串。
“纯的正则表达式”的答案是这样的:
string str = "['A','B', ''],['A','D', 'F'],['A','G', 'G']";
string[] strs =
Regex.Matches(str, @"(\[.*?\])")
.OfType<Match>()
.Select(m => m.Groups[0].Value)
.ToArray();
这是更宽容不同的 - 或甚至混合 - 括号内的基团之间的分隔符,如逗号空间或空间,而不是仅仅一个逗号。如果你的输入字符串定义良好,那么这不是一个问题,但我更喜欢能够处理可能来自不同来源并可能不完全符合的输入。
是''['],']“'有效的输入吗? – Cameron