Извлечение токенов из строки с регулярными выражениями в .NET - PullRequest
7 голосов
/ 02 мая 2011

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

Select a [COLOR] and a [SIZE].

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

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

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

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

Ответы [ 2 ]

11 голосов
/ 02 мая 2011

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

0 голосов
/ 09 июня 2012

Вот метод без использования регулярных выражений (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
        // .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...