C#搜索关键字和存储变量的多行字符串

时间:2017-01-09 08:20:23

标签: c# string split multiline

我有一个从数据库中获取的多行字符串。 该字符串的格式如下:

The below text is for the label program

COMPANY=ComanyName
PRODUCT=ProductName
SERIALMASK=123456789YYWWXXXX

如何查看此文本并使用ComanyName, ProductName, 123456789YYWWXXXX存储变量或数组,以便将这些值插入Windows Forms Application上的文本框中?

我的最大障碍是有时格式为:

The below text is for the label program

Company1 Information: 
COMPANY=ComanyName 
PRODUCT=ProductName 
SERIALMASK=123456789YYWWXXXX

Company2 Information: 
COMPANY=ComanyName 
PRODUCT=ProductName 
SERIALMASK=123456789YYWWXXXX

在这种情况下,我只想提取COMPANYPRODUCTSERIALMASK变量的第一次出现。

现在我有代码保存变量中的每一行,我想我可以在foreach循环中运行switch-case函数并查找substring。但我希望有一种更有效的方式

3 个答案:

答案 0 :(得分:1)

尝试以下代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input =
                "COMPANY=ComanyName\n" +
                "PRODUCT=ProductName\n" +
                "SERIALMASK=123456789YYWWXXXX\n";

            string pattern = @"(?'name'\w+)=(?'value'\w+)";

            MatchCollection matches = Regex.Matches(input,pattern);

            foreach(Match match in matches)
            {
                Console.WriteLine("Name : '{0}', Value : '{1}'", match.Groups["name"].Value, match.Groups["value"].Value);
            }
            Console.ReadLine();

            Dictionary<string, string> dict = matches.Cast<Match>()
                .GroupBy(x => x.Groups["name"].Value, y => y.Groups["value"].Value)
                .ToDictionary(x => x.Key, y => y.FirstOrDefault());
        }
    }
}

答案 1 :(得分:1)

这可能会为你做到这一点

string allText = File.ReadAllText("JsonFound.txt");
List<string> allrecord = allText.Split(new string[] { "\r\n\r\n" }, StringSplitOptions.RemoveEmptyEntries)
                                .Where(x => x.Contains(":"))
                                .ToList();
List<CompanyInfo> CompanyInfos = new List<CompanyInfo>();
List<string> infos = new List<string>();
foreach(string s in allrecord)
{
    infos = s.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)
             .Skip(Math.Max(0, 1))
                       .SelectMany(q=>q.Split('='))
             .ToList();

    CompanyInfo ci = new CompanyInfo();
    ci.CompanyName = infos[1];
    ci.ProductName = infos[3];
    ci.SerialMaskNumber = infos[5];
    CompanyInfos.Add(ci);
}

班级CompanyInfo看起来像这样

public class CompanyInfo
{
    public string CompanyName
    {
        get;
        set;
    }
    public string ProductName
    {
        get;
        set;
    }
    public string SerialMaskNumber
    {
        get;
        set;
    }
}

答案 2 :(得分:0)

您可以使用HashSet功能。该列表不包含重复记录。

question_item