Ответ 1
Попробуйте это, чтобы захватить ключ и значение:
(\w+)\s*=\s*(@"(?:[^"]|"")*"|"(?:\\.|[^\\"])*")
В качестве бонуса он также работает по стенографическим строкам.
Пример: http://regexhero.net/tester/?id=9f38ec0d-8f53-4e03-aa58-520fcf4c0f98
Примеры С#: http://ideone.com/b7YWn, http://ideone.com/Ykbci p >
Здесь аннотированная версия:
string pattern = @"
(\w+)\s*=\s* # key =
( # Capturing group for the string
@"" # verbatim string - match literal at-sign and a quote
(?:
[^""]|"""" # match a non-quote character, or two quotes
)* # zero times or more
"" #literal quote
| #OR - regular string
"" # string literal - opening quote
(?:
\\. # match an escaped character,
|[^\\""] # or a character that isn't a quote or a backslash
)* # a few times
"" # string literal - closing quote
)";
MatchCollection matches = Regex.Matches(s, pattern,
RegexOptions.IgnorePatternWhitespace);
Обратите внимание, что регулярная строка позволяет экранировать все символы, в отличие от С#, и позволяет использовать символы новой строки. Это должно быть легко исправить, если вам нужна проверка, но это должен быть файл для синтаксического анализа.