регулярное выражение для соответствия сбалансированным квадратным скобкам с разделителями-запятыми, имеющим рекурсию - PullRequest
1 голос
/ 08 апреля 2020

Я бы хотел, чтобы регулярное выражение соответствовало сбалансированным квадратным скобкам, разделенным запятыми, где содержимое квадратных скобок могло бы быть самими сбалансированными квадратными скобками, разделенными запятыми.

Вот несколько примеров:

example 1
input = "[abc],[def]"
groups 
    group 1 = "abc"
    group 2 = "def"

example 2
input = "[[ghi],[jkl]],[mno[pqr]],[[stu]]"
groups
    group 1 = "[ghi],[jkl]"
    group 2 = "mno[pqr]"
    group 3 = "[stu]"

Итак, обратите внимание, что во втором примере "ghi" и "jkl" не являются их собственными группами. Мне не нужно проходить весь путь вниз, мне просто нужно регулярное выражение, чтобы найти группы "уровня 0".

1 Ответ

0 голосов
/ 08 апреля 2020

Вот некоторый код, который поможет вам начать разбирать эти значения.

public static IEnumerable<string> SplitSquareBraketByComma(string input)
{
    int start = 0;
    int brakets = 0;
    for(int i = 0; i < input.Length; i++)
    {
        if(input[i] == '[') 
        {
            brakets++;
            continue;
        }

        if(input[i] == ']')
        {
            brakets--;
            continue;
        }

        if(brakets == 0 && input[i] == ',')
        {
            yield return input.Substring(start, i - start);
            start = i + 1;
        }
    }

    if(start < input.Length)
    {
        yield return input.Substring(start);
    }
}

Он в основном сохраняет количество скобок, и когда он видит запятую, когда число открытых скобок равно нулю, выделяет новую строку из предыдущего разбиения.

Примечание: здесь нет никакого кода для проверки правильности ввода (имеющего все сбалансированные скобки), и, таким образом, на всякий случай он остается в самых внешних скобках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...