日期:2014-05-17  浏览次数:20398 次

c#.net正则替换问题
[[{I:19, M:0, E:1, N:20, C:"8", R:1}, {I:1, M:0, E:1, N:10, C:1, R:1}, {I:3, M:0, E:1, N:10, C:1, R:1}, {I:2, M:0, E:1, N:10, C:1, R:1}, {I:25, M:1, E:1, N:10, C:3, R:1}, {I:26, M:1, E:1, N:10, C:3, R:1}], [{I:15, M:0, E:1, N:4, C:7, R:1}, {I:8, M:0, E:1, N:4, C:2, R:1}, {I:5, M:0, E:1, N:4, C:2, R:1}, {I:4, M:0, E:1, N:4, C:2, R:1}, {I:23, M:0, E:1, N:10, C:3, R:1}, {I:22, M:0, E:1, N:10, C:3, R:1}, {I:21, M:0, E:1, N:10, C:3, R:1}], [{I:16, M:0, E:1, N:4, C:7, R:1}, {I:9, M:0, E:1, N:10, C:1, R:1}, {I:7, M:0, E:1, N:4, C:2, R:1}, {I:6, M:0, E:1, N:4, C:2, R:1}, {I:28, M:0, E:1, N:10, C:3, R:1}, {I:27, M:0, E:1, N:10, C:3, R:1}, {I:24, M:0, E:1, N:10, C:3, R:1}], [{I:18, M:0, E:1, N:30, C:8, R:1}, {I:20, M:0, E:1, N:30, C:8, R:0}, {I:17, M:0, E:1, N:30, C:8, R:1}, {I:30, M:0, E:0, N:1, C:9, R:1}, {I:14, M:0, E:0, N:1, C:9, R:1}, {I:12, M:0, E:0, N:1, C:9, R:1}, {I:11, M:0, E:1, N:10, C:1, R:1}, {I:10, M:0, E:1, N:10, C:1, R:1}]]
有这样一个JSON串,我想查找I:28开头的这样一个元素,然后用正则匹配,替换这个元素所在的整个{}为空,例如把{I:28, M:0, E:1, N:10, C:3, R:1}替换为空,以I:28开头的这个元素,在这个JSON中的位置不是固定的,其中的M,E,N,C,R的值也是不固定的,在{}的前面或后面或许会有“,”也或许没有“,”,如果前面有“,”就把“,”也删除,如果后面有“,”就把后面的“,”也删除,如果前面跟后面都有“,”,那么随便删除一个,查找以I:28为开头的{},然后替换这个{}为空
希望大家帮忙,谢谢,大半夜的发帖不容易,顶我哦^_^

------解决方案--------------------
http://www.cnblogs.com/ambar/archive/2010/07/13/parse-json-via-csharp.html

我只是说,当成 JSON 直接处理比较好。
------解决方案--------------------
给两种正则实现吧

C# code
string test = "[[{I:19, M:0, E:1, N:20, C:\"8\", R:1}, {I:1, M:0, E:1, N:10, C:1, R:1}, {I:3, M:0, E:1, N:10, C:1, R:1}, {I:2, M:0, E:1, N:10, C:1, R:1}, {I:25, M:1, E:1, N:10, C:3, R:1}, {I:26, M:1, E:1, N:10, C:3, R:1}], [{I:15, M:0, E:1, N:4, C:7, R:1}, {I:8, M:0, E:1, N:4, C:2, R:1}, {I:5, M:0, E:1, N:4, C:2, R:1}, {I:4, M:0, E:1, N:4, C:2, R:1}, {I:23, M:0, E:1, N:10, C:3, R:1}, {I:22, M:0, E:1, N:10, C:3, R:1}, {I:21, M:0, E:1, N:10, C:3, R:1}], [{I:16, M:0, E:1, N:4, C:7, R:1}, {I:9, M:0, E:1, N:10, C:1, R:1}, {I:7, M:0, E:1, N:4, C:2, R:1}, {I:6, M:0, E:1, N:4, C:2, R:1}, {I:28, M:0, E:1, N:10, C:3, R:1}, {I:27, M:0, E:1, N:10, C:3, R:1}, {I:24, M:0, E:1, N:10, C:3, R:1}], [{I:18, M:0, E:1, N:30, C:8, R:1}, {I:20, M:0, E:1, N:30, C:8, R:0}, {I:17, M:0, E:1, N:30, C:8, R:1}, {I:30, M:0, E:0, N:1, C:9, R:1}, {I:14, M:0, E:0, N:1, C:9, R:1}, {I:12, M:0, E:0, N:1, C:9, R:1}, {I:11, M:0, E:1, N:10, C:1, R:1}, {I:10, M:0, E:1, N:10, C:1, R:1}]]";
Regex reg = new Regex(@"(?<s>(?:,\s*))?{I:28[^}]*}(?(s)|(?:\s*,)?)");
//Regex regDel = new Regex(@"(,\s*)?{I:28[^}]*}(\s*,)?");
//string result = regDel.Replace(test, delegate(Match m) { if (m.Groups[1].Success && m.Groups[2].Success) return ","; return ""; });
string result = reg.Replace(test, "");
richTextBox2.Text = result;

------解决方案--------------------
探讨
给两种正则实现吧


C# code
string test = "[[{I:19, M:0, E:1, N:20, C:\"8\", R:1}, {I:1, M:0, E:1, N:10, C:1, R:1}, {I:3, M:0, E:1, N:10, C:1, R:1}, {I:2, M:0, E:1, N:10, C:1, R:1}, {I:25, M:1, E:1, N:10, ……

------解决方案--------------------
探讨

给两种正则实现吧

C# code
string test = "[[{I:19, M:0, E:1, N:20, C:\"8\", R:1}, {I:1, M:0, E:1, N:10, C:1, R:1}, {I:3, M:0, E:1, N:10, C:1, R:1}, {I:2, M:0, E:1, N:10, C:1, R:1}, {I:25, M:1, E:1, N:10, C……

------解决方案--------------------
探讨

给两种正则实现吧

C# code
string test = "[[{I:19, M:0, E:1, N:20, C:\"8\", R:1}, {I:1, M:0, E:1, N:10, C:1, R:1}, {I:3, M:0, E:1, N:10, C:1, R:1}, {I:2, M:0, E:1, N:10, C:1, R:1}, {I:25, M:1, E:1, N:10, C……