C# 从具有特定模式的文本文件中读取文本

C# 从具有特定模式的文本文件中读取文本,c#,C#,嗨,我有一个要求,我需要从文本文件中读取内容。示例文本内容如下所示 Name=Check_Amt Public=Yes DateName=pp Name=DBO 我需要阅读文本,只提取Name='What ever text'后面的值 所以我希望输出为Check_Amt,DBO 当查询数据(例如文件行)时,我需要在C中执行此操作Linq通常是一个方便的工具;如果文件中有行 name=value 格式,可以这样查询 读取文件行 将每行拆分为名称、值对 按名称筛选对 从每对中提取值 将值具体化到

嗨,我有一个要求,我需要从文本文件中读取内容。示例文本内容如下所示

Name=Check_Amt
Public=Yes
DateName=pp
Name=DBO
我需要阅读文本,只提取Name='What ever text'后面的值

所以我希望输出为Check_Amt,DBO

当查询数据(例如文件行)时,我需要在C中执行此操作Linq通常是一个方便的工具;如果文件中有行

name=value
格式,可以这样查询

读取文件行 将每行拆分为名称、值对 按名称筛选对 从每对中提取值 将值具体化到集合中 代码:

最后,如果需要逗号分隔的字符串,请连接以下值:


您可以使用LINQ选择您需要的:

var names=File. ReadLines("my file.txt" ).Select(l=>l.Split('=')).Where(t=>t.Length==2).Where(t=>t[0]=="Name").Select(t=>t[1])

我认为最好的例子是正则表达式

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(?<=Name=).*?(?=Public)";
        string input = @"Name=Check_Amt Public=Yes DateName=pp Name=DBO";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}
编辑:我的答案是在你的问题被纠正之前写的,虽然它仍然有效,但LINQ的答案会更好。

另一种方式:

var str = @"Name=Check_Amt
Public=Yes
DateName=pp
Name=DBO";

var find = "Name=";
var result = new List<string>();
using (var reader = new StringReader(str)) //Change to StreamReader to read from file
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        if (line.StartsWith(find))
            result.Add(line.Substring(find.Length));
    }
}

它只是一个纯文本文件还是一个xml、json文件?是像您展示的那样都是一行,还是每行一个赋值。考虑使用{}按钮来格式化您的示例。您尝试了什么?逐行读取文件,如果文件以Name=开头,则在第五个字符后打印该行的所有文本?这是一个文本文件,每个内容都是单独的一行您是否已尝试打开文件并读取行?如果是这样的话,请将您编写的代码发布到现在。[显示您的努力!并显示您的问题!]投票将是最好的选择。在这种简单的情况下,我非常喜欢String.StartsWith,而不是复杂的正则表达式解决方案或其他过度工程的东西。当然,有一个工具,可以做任何事情,以及,但你不需要它!很高兴听到这个消息。如果你认为我的回答有帮助,我将不胜感激。
using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(?<=Name=).*?(?=Public)";
        string input = @"Name=Check_Amt Public=Yes DateName=pp Name=DBO";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}
var str = @"Name=Check_Amt
Public=Yes
DateName=pp
Name=DBO";

var find = "Name=";
var result = new List<string>();
using (var reader = new StringReader(str)) //Change to StreamReader to read from file
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        if (line.StartsWith(find))
            result.Add(line.Substring(find.Length));
    }
}