我有以下字符串:
[{names: {en: "US 30 - 5 Minute Level", es: "US 30 - 5 Minute Level"}, status: "A", displayed: "Y", start_time: "2011-05-20 00:00:00", start_time_xls: {en: "20th of May 2011 00:00 am", es: "20 May 2011 00:00 am"}, suspend_at: "2011-05-20 16:53:48", is_off: "Y", score_home: "", score_away: "", bids_status: "", period_id: "", curr_period_start_time: "", score_extra_info: "", settled: "N", ev_id: 2688484, ev_type_id: 10745, num_mkts: 5, venues: {en: "", es: ""}, disporder: 2040, ev_stream_available: false}]
Run Code Online (Sandbox Code Playgroud)
我需要用引号括起所有变量名,这样就可以验证为JSON.我正在做以下事情,但它也分开了日期..
Regex.Replace(input, @"(\w+:)", "\"$0\":", RegexOptions.None);
Run Code Online (Sandbox Code Playgroud)
Regex.Replace之后的输出:
[{"names" {"en" "US 30 - 5 Minute Level", "es" "US 30 - 5 Minute Level"}, "status" "A", "displayed" "Y", "start_time" "2011-05-20 "00""00"00", "start_time_xls" {"en" "20th of May 2011 "00"00 am", "es" "20 May 2011 "00"00 am"}, "suspend_at" "2011-05-20 "16""53"48", "is_off" "Y", "score_home" "", "score_away" "", "bids_status" "", "period_id" "", "curr_period_start_time" "", "score_extra_info" "", "settled" "N", "ev_id" 2688484, "ev_type_id" 10745, "num_mkts" 5, "venues" {"en" "", "es" ""}, "disporder" 2040, "ev_stream_available" false}]
Run Code Online (Sandbox Code Playgroud)
如何更改此以忽略它们?此外,什么是一个良好的基于Web的资源,一劳永逸地到达正则表达式的底部?!
谢谢.
尝试这个模式:
string pattern = @"\b([A-Za-z_]+)\b(?=:)";
string replace = "\"$0\"";
string result = Regex.Replace(input, pattern, replace);
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)
匹配[A-Za-z_]+任何大写/小写字母和下划线字符一次或多次。如果 JSON 名称均不包含数字,则此方法可以正常工作。元\b字符匹配单词边界并(?=:)匹配(但不捕获)冒号。您会注意到该replace模式不包含冒号。
同样,这种模式也可以工作:@"\b([^\d\s]+)\b(?=:)"因为它匹配所有非数字或空格的内容。
学习正则表达式需要大量练习来理解概念、尝试示例并了解事物的工作原理。我建议您使用一个工具来尝试它们以及一些教程。让您开始:
这应该可以帮助你开始。如果您真的想更深入地了解,那么值得一看的两本好书是: