.net 如何将双引号中的字符串与转义匹配?
我很确定,我不能用正则表达式来做这件事,但也许你们中有人更了解它。.net 如何将双引号中的字符串与转义匹配?,.net,json,regex,string,.net,Json,Regex,String,我很确定,我不能用正则表达式来做这件事,但也许你们中有人更了解它。 这是我目前的模式: ^\[\s*"[^\n]+?(?<!\\)"(?:,\s*"[^\n]+?(?<!\\)")*\s*\] 而且 ["1"", "2"] 我知道原因: [^\n]+?有一个尾随的非贪婪符号,但它捕捉到未替换的结束双引号以匹配“[^\n]+?(?这可能就可以了 (?s)^\[\s*“[^”\]*(?:\\.[^”\]*)*”(?:\s*,\s*“[^”\]*(?:\.\.^“\]*)*”*“*”\
这是我目前的模式:
^\[\s*"[^\n]+?(?<!\\)"(?:,\s*"[^\n]+?(?<!\\)")*\s*\]
而且
["1"", "2"]
我知道原因:[^\n]+?
有一个尾随的非贪婪符号,但它捕捉到未替换的结束双引号以匹配“[^\n]+?(?这可能就可以了
(?s)^\[\s*“[^”\]*(?:\\.[^”\]*)*”(?:\s*,\s*“[^”\]*(?:\.\.^“\]*)*”*“*”\s*”
一周前,我为我的问题编写了一个json解析器,所以这实际上只是一个正则表达式问题……顺便说一句/仅供参考:我尝试了PowerShell的newtonsoft.json模块作为json反序列化器,50%的错误消息都是无用的,并且没有位置信息,因此我编写了自己的,始终包含详细的错误消息和正确的错误行号。仅供参考json。NET是最流行的Json解析器,用于ASP.NET Core和ASP.NET Web API。是的,如果行正确,行号是正确的。如果只有一行,或者每行只有一个Json片段,则可能很难找到错误。如果您有解析问题,请询问它们。不要假设最流行的NuGet包已损坏@PanagiotisKanavos您已经表明了您的观点,显然OP需要一个正则表达式解决方案,您所能做的就是给出您的建议并继续前进。非常简单,谢谢。我刚刚添加了2x(?!”
,因为我不想在这里允许空字符串。所以我将使用的最后一个正则表达式是:(?s)^\[\s*(?!”[^\]*(?:\\..\.-.[^\]*)*(?::\*,\s*,\s*(?:“(?!”)[^“\\]*)*”*”*“\s*”*”
我不得不稍微纠正一下这个模式,因为它允许在字符串中间换行,这在json中是无效的。现在最后的模式是:^\[\s*”(?!”[^\\\n]*(?:\[^\n][^\\\n]*”(?:\s*,\s*(?!”[^\\\n]*(?:\[^\\\\\\\\\\n]*)*)*(?:\\[^\\\\\\\\\\\n]*)*)*”*。
["1"", "2"]
(?s) # Dot-all modifier
^ # BOS
\[ # Open [
\s* # optional wsp
" # Open dbl quote
[^"\\]* # optional not dbl quote nor escape
(?: \\ . [^"\\]* )* # optional escape anything, not dlb quote nor escape
" # Close dbl quote
(?: # Cluster
\s* , \s* # opt wsp, comma, opt wsp
" # Same as above
[^"\\]*
(?: \\ . [^"\\]* )*
"
)* # End cluster, do 0 to many times
\s* # optional wsp
\] # Close ]