C# 如何为没有分隔符的键值对解析字符串?

C# 如何为没有分隔符的键值对解析字符串?,c#,.net,regex,parsing,string-search,C#,.net,Regex,Parsing,String Search,如何在C#中解析字符串以提取键-值对,而键和值之间没有任何分隔符 我有一根像这样的线 string str = "\nFIRSTNAMEJOHN\nLASTNAMESMITH\nADDRESS1590 GRACE STREET\nBIRTHDATE04201969" 在上拆分后\n我得到一组字符串,如下所示 string[] properties = ["FIRSTNAMEJOHN","LASTNAMESMITH", etc.] 我想循环这些字符串的分割数组,并从每个字符串中提取键值对,以便

如何在C#中解析字符串以提取键-值对,而键和值之间没有任何分隔符

我有一根像这样的线

string str = "\nFIRSTNAMEJOHN\nLASTNAMESMITH\nADDRESS1590 GRACE STREET\nBIRTHDATE04201969"
在上拆分后\n我得到一组字符串,如下所示

string[] properties = ["FIRSTNAMEJOHN","LASTNAMESMITH", etc.]
我想循环这些字符串的分割数组,并从每个字符串中提取键值对,以便填充对象的属性,例如

Person person = new Person() 
{ FIRSTNAME = JOHN,
  LASTNAME = SMITH,
  etc...
}

最干净的方法是什么?谢谢

您可以创建一个具有这些属性的类,然后通过反射获取对象的属性(因此我们可以使用循环),拆分
\n
字符上的字符串,然后对于每个属性,对于每个设置,如果设置以属性名开头,则根据设置字符串的其余部分设置属性值

例如:

class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string BirthDate { get; set; }

    public override string ToString()
    {
        return $"{FirstName} {LastName}, born on {BirthDate}, lives at: {Address}";
    }
}

public class Program
{
    static void Main(string[] args)
    {
        string str = "\nFIRSTNAMEJOHN\nLASTNAMESMITH\nADDRESS1590 GRACE STREET\nBIRTHDATE04201969";
        var user = new User();
        var properties = typeof(User).GetProperties();
        var settings = str.Split('\n');

        foreach (var property in properties)
        {
            foreach (var setting in settings)
            {
                if (setting.StartsWith(property.Name, StringComparison.OrdinalIgnoreCase))
                {
                    property.SetValue(user, setting.Substring(property.Name.Length));
                    break;
                }
            }
        }

        Console.WriteLine(user);

        GetKeyFromUser("\n\nDone! Press any key to exit...");
    }
}
输出


您从哪些方面获取的数据导致数据没有delimeter?你确定没有一个不可打印的字符作为delimeter吗?你可以用一种非常简单的方式来完成。首先,我使用了字符串输入。我创建了一个名为FieldNames的公共枚举。为了获取字符串值,我创建了一个名为EnumStringValue的类,该类允许您为每个enum成员创建一个属性。最后,我创建了一个ParseString方法,它接受字符串输入。它像以前一样在“\n”上拆分,但在该方法中,它调用一个ParseLine方法,该方法接受拆分数组中的每个项。如果需要,我可以发送,这里没有足够的空间粘贴整个东西。