Regex для объявления и инициализации переменных в c # - PullRequest
1 голос
/ 25 февраля 2009

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

int i, k = 10, l = 0

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

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

Ответы [ 4 ]

3 голосов
/ 25 февраля 2009

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

(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

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

2 голосов
/ 22 марта 2011

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

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

0 голосов
/ 22 марта 2011

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

 ^(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
0 голосов
/ 25 февраля 2009

Вы можете создать свое регулярное выражение из [C # Grammar] (http://msdn.microsoft.com/en-us/library/aa664812(VS.71).aspx). Но построение парсера, безусловно, будет лучше.

...