Регулярное выражение для объявления переменной и инициализации в c#
-
06-09-2019 - |
Вопрос
Я хочу написать регулярное выражение, чтобы извлечь все значения переменных и их имена из инструкции объявления переменных.Скажи, что у меня есть
int i,k = 10,l=0
я хочу написать регулярное выражение что-то вроде int \ s ^,?|(^,?)* но это также будет принимать k = 10, т. е.(без предшествующего ему int) В основном идея такова Если строка начинается с int, то получите список переменных, разделенный ,
я знаю, как извлекать значения csv, но здесь моя строка также имеет некоторое начальное значение.Как я могу это решить?
Решение
Начните думать о структуре определения, скажем,
(a line can start with some spaces) followed by,
(Type) followed by
(at least one space)
(variable_1)
(optionally
(comma // next var
|
'='number // initialization
) ...`
затем попробуйте преобразовать каждую группу:
^ \s* \w+ \s+ \w+ ? (',' | '=' \d+ ) ...
line some type at least var optionally more or init some
start spaces (some chars) one space (some chars) vars val digits
Оставлено в качестве домашнего задания для удаления пробелов и исправления окончательного регулярного выражения.
Другие советы
Вот некоторая полезная информация, которую вы можете использовать
Вы могли бы создать свое регулярное выражение на основе [C # Grammar] (http://msdn.microsoft.com/en-us/library/aa664812 (VS.71).aspx).Но создание синтаксического анализатора, безусловно, было бы лучше.
Попробуй это:
^(int|[sS]tring)\s+\w+\s*(=\s*[^,]+)?(,\s*\w+\s*(=\s*[^,]+)?)*$
Это будет соответствовать вашему примеру кода
int i,k = 10,l=0
И, сделав несколько предположений о языке, который вы можете использовать, а можете и не использовать, он также будет соответствовать:
int i, j, k=10, l=0
string i=23, j, k=10, l=0