簡體   English   中英

使用元素拆分帶有正則表達式的字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM