Python 到 C 尖锐的正则表达式模式来修复 json
本文关键字:模式 json 正则表达式 Python | 更新日期: 2023-09-27 18:36:43
我有一个硬件设备,它通过带有json字符串的http进行控制,但它返回的json已知是无效的。 在Python中,我可以用
response = """[
{text: "67239961", selected: "true", value: "67239961"}
];"""
p = re.compile('([a-zA-Z_]+):')
joined = "".join(response.splitlines())
stripped = joined.strip(';')
cleaned = p.sub(r'"'1":', stripped)
>> [{"text": "67239961", "selected": "true", "value": "67239961"}]
不过,我需要在 C Sharp 中执行此操作,并且对其正则表达式实现不够熟悉。 我试图直接将其移植为
string[] split = response.Split(new string[] { "'r'n", "'n" }, StringSplitOptions.None);
string joined = String.Join("", split);
string stripped = joined.Trim(';');
Regex re = new Regex(@"([a-zA-Z_]+):");
string cleaned = re.Replace(stripped, @"'1");
>> [{'1 "67239961", '1 "true", '1"67239961"}]
实现此目的的正确模式是什么?
编辑:修复是
string cleaned = re.Replace(stripped, @"""$1"":");
在Newtonsoft JSON包的帮助下,您不必求助于RegEx。
Install-Package Newtonsoft.Json
然后在代码中:
var str = @"[
{text: ""67239961"", selected: ""true"", value: ""67239961""}
];";
var json = JsonConvert.DeserializeObject(response.Replace(";",string.Empty));
var clean = JsonConvert.SerializeObject(json);
结果将是:
[{"text":"67239961","selected":"true","value":"67239961"}]
如果您确实有开头和结尾引号,请使用以下命令:
var json = JsonConvert.DeserializeObject(
str.Replace(";",string.Empty).Replace("'"[","[").Replace("]'"","]"));