【发布时间】:2018-11-23 06:48:06
【问题描述】:
我需要从损坏的 Json 中读取一些无法解析为对象的数据。我需要使用正则表达式来获得这个。我还有最后一件事给我带来了麻烦。这是我正在使用的 Json 的 sn-p。
price: "1129.0",
quantity: "0",
rating: "4.9",
ratingCount: "127",
我想提取4.9。为此,我有以下正则表达式。
(?<=rating: \")([\s\S]*?)(?=\")
我遇到的问题是有时 Json 在冒号之间缺少空格。
price:"1129.0",
quantity:"0",
rating:"4.9",
ratingCount:"127",
我无法修改源内容,因为需要在某些节点中保留空白。我试图超级具体并使用以下
(?<=rating: \")([\S*\s*][0-9.](.*?))(?=\")
这可行,但再一次,如果我有缺少空格的 json,它就不起作用。如果我删除规则本身中的空格,它也不起作用。我需要能够使用一个不关心开始和结束块中是否有任何空格的规则。只要空格以外的所有内容都匹配,就很好。
我正在使用 C# 来执行这些正则表达式规则,并且一直在使用 https://regexr.com/3qvlp 来测试这些规则。
【问题讨论】:
-
试试
(?<=rating:\s*\").*(?=\",)。在此处查看现场演示regex101.com/r/kgIDGR/1 -
您正在使用不需要的断言。这是编写正则表达式的一种非常糟糕的方式。它很慢,它有可能有问题的陷阱。由于您无论如何都在捕获,所以只需放弃断言。
rating\s*:\s*"([^"]*)"