我正在尝试编写一个正则表达式,它将匹配包含表单的名称 - 值对的字符串:
<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#不同,并允许换行.如果需要验证,应该很容易纠正,但它应该是用于解析的文件.