【发布时间】:2018-12-21 23:27:01
【问题描述】:
我很确定,我不能用正则表达式来做到这一点,但也许你们中的一个人更了解它。
到目前为止,这是我的模式:
^\[\s*"[^\n]+?(?<!\\)"(?:,\s*"[^\n]+?(?<!\\)")*\s*\]
(它在 .NET 语法中,(?:) 是一个非捕获组,(?<!) 一个消极的组)
这是一个 json 字符串数组,所以我必须在这里处理转义的双引号。
(?<!\\)"
我的问题是,我的模式匹配这些示例字符串:
["", ""]
还有
["1"", "2"]
我知道为什么:[^\n]+? 有一个尾随非贪婪符号,但它捕获未转义的右双引号以匹配第一个示例中的 "[^\n]+?(?<!\\)" 和第二个示例字符串中的另一组 ,\s*"[^\n]+?(?<!\\)"。
我需要的是一个正则表达式,它总是在第一个关闭的非转义双引号处停止,无论接下来会发生什么。
所以我认为正则表达式太模棱两可了。
【问题讨论】:
-
一周前我为我的问题写了一个 json 解析器,所以这实际上只是一个正则表达式问题......
-
顺便说一句/仅供参考:我已经尝试将 PowerShell 的 newtonsoft.json 模块作为 json 反序列化器,并且 50% 的错误消息是无用的并且没有位置信息,所以我自己编写了一个总是详细的错误消息和正确的错误行号。
-
仅供参考 Json.NET 是最流行的 Json 解析器,用于 ASP.NET Core 和 ASP.NET Web API。是的,如果 lines 正确,则行号是正确的。如果只有一行,或者每行有一个 JSON 片段,则可能更难找到问题所在。如果您有解析问题,请询问它们。不要假设最流行的 NuGet 包已损坏
-
@PanagiotisKanavos 你已经表达了你的观点,显然 OP 想要一个正则表达式解决方案,你所能做的就是给出你的建议并继续前进。