正在分析C#中的多行字符串

本文关键字:字符串 | 更新日期: 2023-09-27 18:20:54

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

TYPE Email Forwarding
SIGNATURE mysig.html
COMPANY Smith Incorp
CLIENT NAME James Henries
... heaps of others ....

我需要获取Type、Signature、Company和Client Name的值。还有其他的,但一旦我找到了如何做这些的方法,我就可以做剩下的了。我曾尝试过拆分和修剪字符串,但后来它会拆分像CLIENT NAME这样的字段或像Email Forwarding这样的值。

正在分析C#中的多行字符串

我会将所有"key"值放入一个集合,然后将字符串解析到另一个集合中,然后比较集合的值。

以下是如何获得值的粗略概述:

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

这将完成您的工作。

如果是多行,那么您可以循环通过每行并调用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;
        }
    }

请注意,只有当键都是大写并且值不都是大写时,此逻辑才会起作用。否则,就无法识别哪一个是钥匙(如果钥匙上没有手动轨迹),哪一个不是。