忽略Regex表达式中的空格并匹配

时间:2018-06-13 15:51:39

标签: c# json regex

我需要从腐败的Json中读取一些无法解析为对象的数据。我需要使用正则表达式才能得到这个。我有最后一件事给我带来了麻烦。这是我正在使用的Json的片段。

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来测试规则。

2 个答案:

答案 0 :(得分:2)

(?<=rating:\s*\")([\S*\s*][0-9.](.*?))(?=\")应该有效。它在&#34;之前添加了一个可选的空格。这是可变长度。如果您只需要一个或零,那么(?<=rating:\s{0,1}\")([\S*\s*][0-9.](.*?))(?=\")将起作用。

答案 1 :(得分:0)

您可以在匹配零或更多空格字符后面的正面看法中添加\s*,并使用否定字符类"匹配[^"]+

(?<=rating:\s*")[^"]+(?=\")

Demo