[英]split string with regular expression by elements
拆分此字符串的ac Sharp選項是什么:
"['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']" ];
您可以使用以下正則表達式(?<=\\]),
來分隔以]
開頭的逗號。
代碼是:
String input = "['A','B', ''],['A','D', 'F'],['A','G', 'G']";
String pattern = @"(?<=\]),";
var split = Regex.Split(input, pattern);
如果你的分隔符],
逗號來了支架后]
),你可以使用一個取巧的方法:
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與另一個String分開。 通過字符串分割字符串是按照說明進行此處
您的問題-用[ ],
分割],
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.