Мульти Подстрока из длинной строки

1

У меня длинная строка, мне нужно вынуть только подстроки, которые находятся между { и }, и превратить ее в объект 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 ответа

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);
}
2

Вы можете использовать регулярное выражение для этого, но то, что я сделал бы, это использовать .split('{') для разделения на разделы, пропустить первый раздел и затем использовать.split('}), чтобы найти первую часть каждого раздела.

Вы можете сделать это, используя LINQ

var data = temp
    .Split('{')
    .Skip(1)
    .Select(v => v.Split('}').FirstOrDefault());
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, содержащая вашу строку, как вы указали в своем вопросе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню