C# C语言中多行字符串的解析#

C# C语言中多行字符串的解析#,c#,parsing,C#,Parsing,我有一个字符串如下所示: TYPE Email Forwarding SIGNATURE mysig.html COMPANY Smith Incorp CLIENT NAME James Henries ... heaps of others .... 我需要得到类型、签名、公司和客户名称的值。还有其他的,但一旦我能找到一个解决办法,如何做这些,我可以做其余的。我尝试拆分和修剪字符串,但它会拆分客户端名称等字段或电子邮件转发等值。我会将所有“键”值放入一个集合,然后将字符串解析到另一

我有一个字符串如下所示:

TYPE Email Forwarding

SIGNATURE mysig.html

COMPANY Smith Incorp

CLIENT NAME James Henries

... heaps of others ....
我需要得到类型、签名、公司和客户名称的值。还有其他的,但一旦我能找到一个解决办法,如何做这些,我可以做其余的。我尝试拆分和修剪字符串,但它会拆分客户端名称等字段或电子邮件转发等值。

我会将所有“键”值放入一个集合,然后将字符串解析到另一个集合,然后比较集合的值

以下是如何获得这些值的大致轮廓:

    static void Main(string[] args)
    {
        //Assuming that you know all of the keys before hand
        List<string> keys = new List<string>() { "TYPE", "SIGNATURE", "COMPANY", "CLIENT NAME" };

        //Not sure of the origin of your string to parse.  You would have to change
        //this to read a file or query the DB or whatever
        string multilineString =
            @"TYPE Email Forwarding

            SIGNATURE mysig.html

            COMPANY Smith Incorp

            CLIENT NAME James Henries";

        //Split the string by newlines.
        var lines = multilineString.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

        //Iterate over keys because you probably have less keys than data in the event of duplicates
        foreach (var key in keys)
        {
            //Reduce list of lines to check based on ones that start with a given key
            var filteredLines = lines.Where(l => l.Trim().StartsWith(key)).ToList();

            foreach (var line in filteredLines)
            {
                Console.WriteLine(line.Trim().Remove(0, key.Length + 1));
            }
        }

        Console.ReadLine();
    }
static void Main(字符串[]args)
{
//假设你事先知道所有的钥匙
列表键=新列表(){“类型”、“签名”、“公司”、“客户名称”};
//不确定要分析的字符串的来源。您必须更改
//这可以用来读取文件或查询数据库或任何东西
字符串多重约束=
@“键入电子邮件转发
签名mysig.html
史密斯公司
客户名称“詹姆斯·亨利”;
//用换行符拆分字符串。
var lines=multilestring.Split(新字符串[]{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries);
//迭代键,因为在重复的情况下,键可能比数据少
foreach(var键入键)
{
//根据以给定键开头的行减少要检查的行列表
var filteredLines=lines.Where(l=>l.Trim().StartsWith(key)).ToList();
foreach(filteredLines中的var行)
{
Console.WriteLine(line.Trim().Remove(0,key.Length+1));
}
}
Console.ReadLine();
}
这将完成您的工作

如果是多行,则可以循环遍历每行并调用KeyValue扩展方法,如下所示:

 public static class Program
    {
        public static void Main()
        {
            var value = "TYPE Email Forwarding".KeyValue();
            var value1 = "CLIENT NAME James Henries".KeyValue();

        }

        public static KeyValuePair<string, string> KeyValue(this string rawData)
        {
            var splitValue = rawData.Split(new[] { ' ' }, System.StringSplitOptions.RemoveEmptyEntries);
            KeyValuePair<string, string> returnValue;

            var key = string.Empty;
            var value = string.Empty;
            foreach (var item in splitValue)
            {
                if (item.ToUpper() == item)
                {
                    if (string.IsNullOrWhiteSpace(key))
                    {
                        key += item;
                    }
                    else
                    {
                        key += " " + item;
                    }
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(value))
                    {
                        value += item;
                    }
                    else
                    {
                        value += " "  + item;
                    }
                }
            }

            returnValue = new KeyValuePair<string, string>(key, value);
            return returnValue;
        }
    }
公共静态类程序
{
公共静态void Main()
{
var value=“键入电子邮件转发”。KeyValue();
var value1=“客户名称James Henries.KeyValue();
}
public static KeyValuePair KeyValue(此字符串为rawData)
{
var splitValue=rawData.Split(new[]{''},System.StringSplitOptions.removemptyEntries);
键值对返回值;
var key=string.Empty;
var值=string.Empty;
foreach(splitValue中的变量项)
{
if(item.ToUpper()==item)
{
if(string.IsNullOrWhiteSpace(key))
{
键+=项目;
}
其他的
{
键+=“”+项;
}
}
其他的
{
if(string.IsNullOrWhiteSpace(value))
{
价值+=项目;
}
其他的
{
值+=“”+项;
}
}
}
returnValue=新的KeyValuePair(键,值);
返回值;
}
}
请注意,只有当键都是大写且值不都是大写时,此逻辑才起作用。否则,无法识别哪个是钥匙(钥匙上没有手动轨迹)和哪个不是。

请尝试提问。你想要的东西清单不是问题。向我们展示一些代码,并询问有关该代码的特定问题。