2015-01-16 3 views
1

в моей C# приложения Я хочу, чтобы разобрать файлы конфигурации, которые все ищут, как следующие строки:RegEx разборе для конфигурационных файлов

Attribute1 = Value1 
Attribute2 = Value2 
Attribute3 = Value3 

Вот почему я беру линию файлов по линии и попытаться сопоставить их с RegEx. В настоящее время я получил следующее регулярное выражение:

Match match = Regex.Match(s, @"^" + attribute + @"[\s]* [=] [\s]* (^.*)$", RegexOptions.IgnoreCase); 

На самом деле, это не работает. Я думаю, что часть после = является проблемой, так как без этого она работает нормально. Кто-нибудь имеет представление о том, как решить эту строку? Спасибо уже заранее!

+0

'^' может быть стартовым якорем * или * означать ** не **. В этом случае вы говорите «ничего не для 0 или более символов», которые никогда ничего не зафиксируют. –

+0

Вам не нужно обертывать все ваши символы в квадратных скобках '[]'. Это необходимо только в том случае, если на место могут встать несколько разных значений. В вашем случае '@" \ s * = \ s * "' эквивалентно '@" [\ s] * [=] [\ s] * "' –

+0

Вы должны удалить пробелы '' '' из своего регулярного выражения как они интерпретируются как буквальные пространства. –

ответ

2

Вам необходимо удалить стартовый якорь ^, находящийся внутри группы захвата, где ^ утверждает, что мы находимся в начале линии. А также вам не нужно включать = внутри класса персонажа только = будет хорошо. \s* соответствует нулю или больше пробелов, поэтому вам не нужно включать пробел явно после \s*.

Match match = Regex.Match(s, @"^" + attribute + @"\s*=\s*(.*)$", RegexOptions.IgnoreCase); 
+0

Спасибо за ответ. Это исправляет мою проблему! – schneiti

2

Скажем, что file содержит строку. Тогда вы можете просто сделать это без необходимости в регулярном выражении.

var keyValPair = file.Split('\n').ToDictionary(k => k.Split('=')[0].Trim(), 
               v => v.Split('=')[1].Trim()); 

Теперь у Вас есть ключ-значение Dictionary, где имя атрибута будет ключ и значение атрибута будет значение.

+0

Это действительно хороший ответ, показывающий альтернативный подход к более быстрому (и, скорее всего, более эффективно), получить желаемый результат. –

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