用于匹配C#字符串文字的正则表达式

Col*_*inE 5 c# regex

我正在尝试编写一个正则表达式,它将匹配包含表单的名称 - 值对的字符串:

<name> = <value>, <name> = <value>, ...
Run Code Online (Sandbox Code Playgroud)

其中<value>是C#字符串文字.我已经知道我需要通过这个正则表达式找到的s.到目前为止,我有以下内容:

regex = new Regex(fieldName + @"\s*=\s*""(.*?)""");
Run Code Online (Sandbox Code Playgroud)

这种方法效果很好,但在我尝试匹配的字符串使用转义引号的<value>的情况下,它当然无法匹配.我正在努力解决这个问题,我我需要一个前瞻,但需要一些指示.举个例子,我希望能够匹配下面"困难"命名值的值:

difficult = "\\\a\b\'\"\0\f \t\v", easy = "one"
Run Code Online (Sandbox Code Playgroud)

我很感激你的答案得到了不错的解释,我想学习,而不是复制;-)

Kob*_*obi 10

试试这个来捕捉关键和价值:

(\w+)\s*=\s*(@"(?:[^"]|"")*"|"(?:\\.|[^\\"])*")
Run Code Online (Sandbox Code Playgroud)

作为奖励,它也适用于逐字字符串.
示例:http
://regexhero.net/tester/?id = 9f38ec0d-8f53-4e03-aa58-520fcf4c0f98 C#示例:http://ideone.com/b7YWn,http://ideone.com/Ykbci

这是一个带注释的版本:

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);
Run Code Online (Sandbox Code Playgroud)

请注意,常规字符串允许转义所有字符,与C#不同,并允许换行.如果需要验证,应该很容易纠正,但它应该是用于解析的文件.