Регулярное выражение для объявления и инициализации переменных в c #
Я хочу написать RegEx, чтобы вытащить все значения переменных и их имена из оператора объявления переменных. Скажи, что у меня есть
int i, k = 10, l = 0
Я хочу написать регулярное выражение, например int \ s ^ ,? | (^ ,?) *, но это также будет принимать k = 10, т.е. (без int перед ним) В основном идея заключается в том, что если строка начинается с int, тогда разделите список переменных к ,
Я знаю, как извлечь значения csv, но здесь моя строка также имеет некоторое начальное значение. Как я могу это решить?
Ответов (4)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) . Но создание парсера, безусловно, было бы лучше.
Попробуй это:
^(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