2013-06-19 2 views
1

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

  1. Я вижу много @, но я не могу найти его в MSDN. Для чего нужен @? например: Regex regex = новое регулярное выражение ("@ {lalala},", RegexOptions.Compiled);

  2. Это то, с чем я столкнулся. У меня есть эта строка.

    {BaseClass.InheritClass, Tuple.Create ("MachineState", string.Empty)},

То, что я хочу сделать, это получить имя InheritClass и MachineState, поместите его в переменные.

Я попытался это:

Regex regex = new Regex(@"\{BaseClass.(?<inheritClassStr>\d+),Tuple.Create\(""(?<machineStateStr>\d+)"",string.Empty\)\},", RegexOptions.Compiled); 

Я надеялся, что позже в коде я мог бы сделать что-то вроде этого:

string inheritClassString = inheritClassStr; 
string machineStateString = machineStateStr; 

Но это не работает, и я не знаю, как отлаживаем это. Я не знаю, что фиксирует Regex, поэтому мне очень сложно отлаживать.

Ваша помощь будет принята с благодарностью.

ответ

1

Что вы после (как в регулярном выражении):

\{BaseClass.(?<inheritClassStr>.*?),Tuple.Create\("(?<machineStateStr>.*?)",string.Empty\)\} 

уточнить:

\d, что вы использовали волю математику только цифры, но идентификаторы в C#, как правило, содержат буквы, а также.

.* бы математику любой символ в жадном образом (так больше, тем лучше), так что не является хорошим выбором здесь

.*? будет математике любой символ, но в не жадный образом (так небольшой набор, как это возможно)

И нет никакой магии в C#, так что ваши заявления в регулярное выражение не получит преобразованы в переменные, но вы должны получить доступ к тем, как это:

var inheritClassString = regex.Groups["inheritClassStr"].Value; 

И @ на начало ул ing просто указывает, что компилятор C# не пытается интерпретировать специальные символы, которые можно поместить иначе, а не префиксную строку, такую ​​как вкладка \t\n\r, новая строка, возврат каретки.

+0

Я все еще получаю непризнанным побег последовательность ... я изменил свое Regex на: Regex регулярное выражение = новый Regex ("?.? \ {BaseClass ( *), Tuple.Create \ (\" (? . *?) \ ", string.Empty \) \}", RegexOptions.Compiled); Все еще не удается. У меня есть 4 непризнанная escape-последовательность :( Если я никогда не добавляю escape-последовательность до отметки кавычки, RegEx будет сбой при кавычке ... – Farid

+0

Это именно ошибка, для которой '@'. Префикс вашего регулярного выражения ' @ 'replace' \ "' с '" "' и ваше благо. – Rafal

Смежные вопросы