#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
// .