Извлечение токенов из строки с регулярными выражениями в .NET

#c# #.net #regex #algorithm

#c# #.net #регулярное выражение #алгоритм

Вопрос:

Мне любопытно, возможно ли это вообще с помощью Regex. Я хочу извлечь токены из строки, подобной:

 Select a [COLOR] and a [SIZE].
  

Хорошо, достаточно просто — я могу использовать ([[A-Z] ])

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

 "Select a "
"[COLOR]"
" and a "
"[SIZE]"
"."
  

Какой наилучший подход для этого? Если есть способ сделать это с помощью регулярных выражений, это было бы здорово. В противном случае, я предполагаю, что мне придется извлечь токены, затем вручную выполнить цикл MatchCollection и проанализировать подстроки на основе индексов и длин каждого соответствия. Пожалуйста, обратите внимание, что мне нужно сохранить порядок строк и токенов. Есть ли лучший алгоритм для выполнения такого рода синтаксического анализа строк?

Ответ №1:

Используйте Regex.Split(s, @"([[A-Z] ])") — это должно дать вам точный массив, который вам нужен. Split берет захваченные группы и преобразует их в токены в результирующем массиве.

Ответ №2:

Вот метод без использования регулярных выражений ( Regex ), который использует String.Split , но вы теряете разделители.

         string s = "Select a [COLOR] and a [SIZE].";

        string[] sParts = s.Split('[', ']');

        foreach (string sPart in sParts)
        {
            Debug.WriteLine(sPart);
        }

        // Select a 
        // COLOR
        //  and a 
        // SIZE
        // .