Простой C # Tokenizer с использованием Regex - PullRequest
2 голосов
/ 20 мая 2010

Я пытаюсь токенизировать действительно простые строки, но изо всех сил пытаюсь получить правильное регулярное выражение.

Строки могут выглядеть так:

string1 = "{[Surname]}, some text... {[FirstName]}"

string2 = "{Item}foo.{Item2}bar"

И я хочу извлечь токены в фигурных скобках (так что string1 получает "{[Surname]}","{[FirstName]}", а string2 получает "{Item}" и "{Item2}")

Итак, в принципе, я хочу извлечь два разных типа токенов: {[Foo]} и {Bar}.

этот вопрос довольно хороший, но я не могу понять правильное выражение: лексер бедняги для c # Спасибо за помощь!

Ответы [ 3 ]

2 голосов
/ 21 мая 2010

Они оба хорошие ответы, ребята, спасибо. Вот что я решил в итоге:

// DataToken = {[foo]}

// FieldToken = {Bar}

string pattern = @"(?<DataToken>\{\[\w+\]\})|(?<FieldToken>\{\w+\})";

MatchCollection matches = Regex.Matches(expression.ExpressionString, pattern,
RegexOptions.ExplicitCapture);

string fieldToken = string.Empty;
string dataToken = string.Empty;

foreach (Match m in matches)

{
    // note that EITHER fieldtoken OR DataToken will have a value in each loop
    fieldToken = m.Groups["FieldToken"].Value;
    dataToken = m.Groups["DataToken"].Value;

    if (!string.IsNullOrEmpty(dataToken))
    {
         // Do something
    }

    if (!string.IsNullOrEmpty(fieldToken))
    {
         // Do something else
   }
}
1 голос
/ 20 мая 2010

а как же (?<token>\{[^\}]*\})

1 голос
/ 20 мая 2010

Если правила не очень запутанные, это будет (?<Token>\{\[.+?\]\}) для первой строки и (?<Token>\{.+?\}) для второй

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...