Как разбить строку на блоки Regex'ами?

254
22 октября 2017, 19:16

Надо разбить строку на поля. Поля выделены кавычками (двойными или одинарными):

"поле 1" 'поле 2''поле 3' ...

При этом в поле можно записать кавычки через экранирование:

"'это' одно \"поле\""

Такие поля можно расспарсить следующей регуляркой:

"\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\"" для полей в двойных кавычках
"\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'" для полей в одинарных кавычках

Например:

foreach (Match m in Regex.Matches(s, "\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\""))
{
    Console.WriteLine(m.Value);
}

Как можно сделать тоже самое, но получить последовательно не только Math'и, но и текст между полями?

Answer 1

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

(\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\")

Из MSDN:

If capturing parentheses are used in a Regex.Split expression, any captured text is included in the resulting string array. For example, if you split the string "plum-pear" on a hyphen placed within capturing parentheses, the returned array includes a string element that contains the hyphen.

Если в выражении переданном методу Regex.Split используются отмеченные подвыражения, то захваченный ими текст добавляется в результирующий массив. Например, при разбиении строки "грушево-сливовое" используя знак тире заключенный в скобки, результирующий массив так же включает элемент содержащий одно тире.

["грушево", "-", "сливовое"]
READ ALSO
Возврат значения из JS функции в CefSharp.Wpf

Возврат значения из JS функции в CefSharp.Wpf

Пытаюсь возвратить значение JS функции на странице, загруженной в CEF браузере, используя метод EvaluateScriptAsyncПосетил десятки веб-страниц и документаций,...

421
Задача на многопоточность [требует правки]

Задача на многопоточность [требует правки]

В институте задали задачу по с#Не могу решить ее:

418
Удаление пользователя ASP.NET Identity

Удаление пользователя ASP.NET Identity

Пытаюсь удалить пользователя:

280
Создание простой нейросети

Создание простой нейросети

Доброго времени сутокДопустим хочу сделать простую нейросеть для XOR:

428