如何使用linq处理文本文件并有条件地将其读入列表<;类别>;还是一本字典

如何使用linq处理文本文件并有条件地将其读入列表<;类别>;还是一本字典,linq,text,process,Linq,Text,Process,如何使用Linq处理以下场景:下面是示例测试文件 " ^说出一个 瓦卢亚 ^名字B ^名称C 瓦卢克 " 我希望linq能够处理它,并将它们读入列表或字典 公共类名称值 { 公共字符串colname; 公共字符串colvalue; } 像这样: ({“name_A”,“valueA”},{“name_B”,“”“},{“name_C”,“valueC”}) 基本上,每个名称行都以^开头,后跟一个值行,但并非每个名称都在文本文件中附加了值。在名称行中,将任何空格替换为_ 谢谢 以下是一些代码,它们

如何使用Linq处理以下场景:下面是示例测试文件

"

^说出一个

瓦卢亚

^名字B

^名称C

瓦卢克

"

我希望linq能够处理它,并将它们读入列表或字典

公共类名称值 { 公共字符串colname; 公共字符串colvalue; }

像这样:

({“name_A”,“valueA”},{“name_B”,“”“},{“name_C”,“valueC”})

基本上,每个名称行都以^开头,后跟一个值行,但并非每个名称都在文本文件中附加了值。在名称行中,将任何空格替换为_


谢谢

以下是一些代码,它们应该执行您想要执行的操作:

使用系统;
使用System.Text.RegularExpressions;
使用System.Linq;
公开课考试
{
公共静态void Main()
{
变量输入=@“^name A
瓦卢亚
^名字B
^名称C
valueC”;
变量模式=@“\^[^\^]*”;
var matches=Regex.matches(输入、模式、RegexOptions.Multiline);
var dict=matches.Cast().ToDictionary(s=>s.Value.Split('\n')[0].Trim().Remove(0,1),s=>s.Value.Split('\n')[1].Trim());
Console.WriteLine(dict.Aggregate(String.Empty,(s,s1)=>s+s1.Key+“:“+s1.Value+”);
}
}
它使用正则表达式和LINQ

using System;
using System.Text.RegularExpressions;
using System.Linq;

public class Test
{
   public static void Main()
   {
      var input = @"^name A
      valueA
      ^name B
      ^name C
      valueC";
      var pattern = @"\^[^\^]*";

      var matches = Regex.Matches(input, pattern, RegexOptions.Multiline);
      var dict = matches.Cast<Match>().ToDictionary(s => s.Value.Split('\n')[0].Trim().Remove(0, 1), s => s.Value.Split('\n')[1].Trim());

      Console.WriteLine(dict.Aggregate(String.Empty, (s, s1) => s + s1.Key + ":" + s1.Value +"|"));
   }
}