в моем приложении С# я хочу проанализировать файлы конфигурации, которые выглядят как следующие строки:
Attribute1 = Value1
Attribute2 = Value2
Attribute3 = Value3
Вот почему я беру файлы по строкам и пытаюсь сопоставить их с RegEx. В настоящее время я получил следующее регулярное выражение:
Match match = Regex.Match(s, @"^" + attribute + @"[\s]* [=] [\s]* (^.*)$", RegexOptions.IgnoreCase);
Собственно, это не работает. Я думаю, что часть после =
проблема, так как без нее она работает нормально. Кто-нибудь имеет представление о том, как решить эту строку? Спасибо уже заранее!
Вам нужно удалить стартовый якорь ^
присутствующий в группе захвата, где ^
утверждает, что мы находимся в начале строки. А также вам не нужно включать =
внутри символьного класса just =
было бы хорошо. \s*
соответствует нулю или больше пробелов, поэтому вам не нужно явно указывать пробел после \s*
.
Match match = Regex.Match(s, @"^" + attribute + @"\s*=\s*(.*)$", RegexOptions.IgnoreCase);
Пусть говорят, что file
содержит строку. Тогда вы можете просто сделать это без необходимости в регулярном выражении.
var keyValPair = file.Split('\n').ToDictionary(k => k.Split('=')[0].Trim(),
v => v.Split('=')[1].Trim());
Теперь у вас есть Dictionary
ключевых Dictionary
, где атрибутом будет ключ, а значение атрибута будет значением.
^
может быть начальным якорем или не иметь в виду. В этом случае вы говорите «ничего для 0 или более символов», что никогда не захватывает ничего.[]
. Это необходимо только в том случае, если несколько разных значений могут занять место. В вашем случае@"\s*=\s*"
эквивалентно@"[\s]*[=][\s]*"