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

StackOverflow https://stackoverflow.com/questions/585853

Вопрос

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

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

Оставлено в качестве домашнего задания для удаления пробелов и исправления окончательного регулярного выражения.

Другие советы

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

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

Вы могли бы создать свое регулярное выражение на основе [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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top