Разбор RegEx для конфигурационных файлов

1

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

Attribute1 = Value1
Attribute2 = Value2
Attribute3 = Value3

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

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

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

  • 0
    ^ может быть начальным якорем или не иметь в виду. В этом случае вы говорите «ничего для 0 или более символов», что никогда не захватывает ничего.
  • 0
    Вам не нужно заключать всех ваших персонажей в квадратные скобки [] . Это необходимо только в том случае, если несколько разных значений могут занять место. В вашем случае @"\s*=\s*" эквивалентно @"[\s]*[=][\s]*"
Показать ещё 3 комментария
Теги:
parsing

2 ответа

2
Лучший ответ

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

Match match = Regex.Match(s, @"^" + attribute + @"\s*=\s*(.*)$", RegexOptions.IgnoreCase);
  • 0
    Спасибо за ответ. Это решает мою проблему!
2

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

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

Теперь у вас есть Dictionary ключевых Dictionary, где атрибутом будет ключ, а значение атрибута будет значением.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню