如何在C#中获取和拆分一部分字符串?

时间:2018-09-11 14:56:41

标签: c# string object split tags

我希望每个<div class="person"> { /*JSON stuff/* }成为对象列表中的单独元素。它与其他html内容(...html tags...)混合在一起。我有一个来自html文件的字符串:

...html tags...
<div class="person">
{
    "name":"Bob",
    "age":20,
    "color":"blue"
}
</div>
...html tags...
<div class="person">
{
    "name":"John",
    "age":30,
    "color":"green"
}
</div>
...html tags...

无法预测会有多少人。我认为我将使用Regex,Json或Substring。我的问题是这些人周围还有许多其他内容,我不知道将每个元素作为对象列表中的单独元素的最简单解决方案是什么。

例如,我有一个这样的课程:

class Person
{
    public string name {get;set;}
    public int age {get;set;}
}

我想从此html上传List<Person>列表。

1 个答案:

答案 0 :(得分:0)

看看这是否有帮助...

using System;
using System.Linq;
using System.Text.RegularExpressions;

using Newtonsoft.Json;

namespace ConsoleApp1 {
    class Program {
        static void Main(string[] args) {

            // Just get your input loaded into a variable called input
            var input = @"
                <div class='person'>
                {
                    'name':'Bob',
                    'age':20,
                    'color':'blue'
                }
                </div>
                <div class='dog'>
                {
                    'name':'Jim',
                    'age':30,
                    'color':'green'
                }
                </div>
                <div class='person'>
                {
                    'name':'John',
                    'age':30,
                    'color':'green'
                }
                </div>
            ".Replace("'", "\"");

            Regex personContents = new Regex("<div class=\"person\">(.+?)</div>", RegexOptions.Singleline);
            var persons = personContents.Matches(input).Cast<Match>().Take(6).Select(x => JsonConvert.DeserializeObject<Person>(x.Groups[1].Value.Trim())).ToArray();
            var names = string.Join(",", persons.Select(x => x.name));
            Console.WriteLine($"names={names}");
        }

        class Person {
            public string name { get; set; }
            public int age { get; set; }
            //public string color { get; set; }
        }
    }
}

上面的代码显示“ Bob,John”。这不能解决过滤掉重复项的问题,但是使用LINQ的Distinct()方法仅捕获唯一的记录就足够了。