来自长字符串的多子串

时间:2014-05-20 13:18:55

标签: c# asp.net

我有一个长字符串,我只需要取出{}之间的子串,并将其转换为Json对象

此字符串

    sys=t85,fggh{"Name":"5038.zip","Folder":"Root",,"Download":"services/DownloadFile.ashx?"} dsdfg x=565,dfg 
{"Name":"5038.zip","Folder":"Root",,"Download":"services/DownloadFile.ashx?"}dfsdfg567
{"Name":"5038.zip","Folder":"Root",,"Download":"services/DownloadFile.ashx?"}sdfs

我里面有垃圾,所以我需要在{}

之间提取数据的子字符串

我的代码在这里,但是我被卡住了,我无法删除已经使用的数据。

List<JsonTypeFile> AllFiles = new List<JsonTypeFile>();
int lenght = -1;

while (temp.Length>3)
{
    lenght = temp.IndexOf("}") - temp.IndexOf("{");
    temp=temp.Substring(temp.IndexOf("{"), lenght+1);
    temp.Remove(temp.IndexOf("{"), lenght + 1);
    var result = JsonConvert.DeserializeObject<SnSafe.JsonTypeFile>(temp);
    AllFiles.Add(result);
}

3 个答案:

答案 0 :(得分:2)

或者使用正则表达式,你可以得到这样的字符串:

        var regex = new Regex("{([^}]*)}");
        var matches = regex.Matches(str);
        var list = (from object m in matches select m.ToString().Replace("{",string.Empty).Replace("}",string.Empty)).ToList();
        var jsonList = JsonConvert.SerializeObject(list);

str 变量,其中包含您在问题中提供的字符串。

答案 1 :(得分:2)

您可以使用正则表达式,但我要做的是使用.split ('{')拆分为部分,跳过第一部分,然后使用.split('})查找每个部分的第一部分。

您可以使用LINQ

执行此操作
var data = temp
    .Split('{')
    .Skip(1)
    .Select(v => v.Split('}').FirstOrDefault());

答案 2 :(得分:1)

如果我理解正确,你只想在大括号之间提取任何内容并忽略其他任何内容。

以下正则表达式应该允许您提取该信息:

{[^}]*} (一个大括号,后跟任何不是大括号的东西,然后是大括号)

您可以提取所有实例,然后使用以下内容对其进行反序列化:

using System.Text.RegularExpressions;

...

List<JsonTypeFile> AllFiles = new List<JsonTypeFile>();

foreach(Match match in Regex.Matches(temp, "{[^}]*}"))
{
  var result = JsonConvert.DeserializeObject<SnSafe.JsonTypeFile>(match.Value);
  AllFiles.Add(result);
}