C # маскировка строк / форматирование / фильтрация с или без регулярного выражения - PullRequest
0 голосов
/ 03 мая 2011

Надеюсь, это не слишком сложно, я просто не могу найти ответ, который мне нужен.

У меня есть строка с переменными, например: this is a %variable% string Формат переменных в строке произвольный, хотя в этом примере мы используем фильтр %{0}%

Я хочу сопоставить имена переменных со свойствами, и в идеале я не хочу перебирать GetProperties, форматируя и проверяя каждое имя. Я хотел бы получить «переменную» в виде строки и проверить ее.

Я уже использую RegEx, чтобы получить список переменных в строке, используя данный фильтр:
string regExSyntax = string.Format(syntax, @"(?<word>\w+)"); но это возвращает их С '%' (например, '% variable%') и, как я сказал, этот фильтр произвольный, поэтому я не могу просто сделать строку. Замена.

Такое ощущение, что все должно быть просто ....

Спасибо!

Ответы [ 3 ]

3 голосов
/ 03 мая 2011
   "(?<word>\w+)"

Просто захватывает что-либо буквенно-цифровое и помещает его в именованную группу захвата под названием "Слово"

Возможно, вас заинтересует изучение взглядов вперед и назад. Например:

"(?<=%)(?<word>\w+)(?=%)"

Вы можете сделать его более универсальным, поместив свой фильтр в отдельную переменную:

    string Boundie = "%";
    string Expression = @"(?<=" + Boundie + @")(?<word>\w+)(?=" + Boundie + @")";

Надеюсь, это где-то рядом с тем, что вы ищете.

2 голосов
/ 03 мая 2011

Учитывая, что ваш синтаксис регулярных выражений: string regExSyntax = string.Format(syntax, @"(?<word>\w+)");, я предполагаю, что вы собираетесь создать Regex и использовать его для сопоставления с какой-либо строкой:

Regex reExtractVars = new Regex(regExSyntax);
Match m = reExtractVars.Match(inputString);
while (m.Success)
{
    // get the matched variable
    string wholeVar = m.Value;  // returns "%variable%"

    // get just the "word"
    string wordOnly = m.Groups["word"].Value;  // returns "variable"

    m = m.NextMatch();
}

Или я полностью неправильно понялпроблема?

0 голосов
/ 03 мая 2011

Акрон,

Если вы собираетесь свернуть свой собственный синтаксический анализатор ... кроме того, чтобы быть "немного сумасшедшим", если это не главное в упражнении (не так ли?), Тогда я настоятельно рекомендую вам ПОЦЕЛУЙ это ... Keep It Simple Stoopid.

Так, что означает ПЕРЕМЕННОЕ в вашем синтаксисе сценариев? Это знаки процента? И они исправлены, да? Таким образом, %name% является переменной, но # comment # НЕ является переменной ... правильно? Фраза «этот фильтр произвольный» меня беспокоит. Что такое «фильтр»?

Если это не домашнее задание, просто используйте существующий механизм сценариев с существующим, хорошо определенным, хорошо известным синтаксисом. Например, Jint .

Приветствия. Кит.

...