Регулярное выражение для объявления и инициализации переменных в c #

Я хочу написать RegEx, чтобы вытащить все значения переменных и их имена из оператора объявления переменных. Скажи, что у меня есть

int i, k = 10, l = 0

Я хочу написать регулярное выражение, например int \ s ^ ,? | (^ ,?) *, но это также будет принимать k = 10, т.е. (без int перед ним) В основном идея заключается в том, что если строка начинается с int, тогда разделите список переменных к ,

Я знаю, как извлечь значения csv, но здесь моя строка также имеет некоторое начальное значение. Как я могу это решить?

Ответов (4)

Решение

Начните думать о структуре определения, скажем,

(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#] ( http://msdn.microsoft.com/en-us/library/aa664812(VS.71).aspx) . Но создание парсера, безусловно, было бы лучше.

Вот некоторая полезная информация, которую вы можете использовать

http://compsci.ca/v3/viewtopic.php?t=6712

Попробуй это:

 ^(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