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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C#中获取和拆分字符串的一部分?相关的知识,希望对你有一定的参考价值。

我想每个<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>列表。

答案

看看这有帮助......

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()方法只需抓取唯一记录就足够了。

以上是关于如何在C#中获取和拆分字符串的一部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何将拆分的字符串保存在C结构中包含的字符数组中?

sql将字符串拆分为始终相同数量的片段

拆分字符串并在不同分隔符之前获取值

C ++多拆分字符串

C ++中的拆分字符串[重复]

如何拆分文件并保留每个部分的第一行?