C# 使用c从文本文件中提取字符“[”和字符“]”之间的字符串

C# 使用c从文本文件中提取字符“[”和字符“]”之间的字符串,c#,C#,我有一个文本文件,其数据如下 [1] [apple] [market] [2][toy]asdv[shop]sdvdsrdt 我只需要[]之间的数据。[]之外的将被丢弃。 我已经试过代码了 string[] lines = textBox1.Text.Split("["); foreach (string line in lines) { Console.WriteLine(line); } 但是它说我有一个字符错误

我有一个文本文件,其数据如下

[1] [apple] [market]

[2][toy]asdv[shop]sdvdsrdt
我只需要[]之间的数据。[]之外的将被丢弃。 我已经试过代码了

string[] lines = textBox1.Text.Split("[");

        foreach (string line in lines)
        {
            Console.WriteLine(line);
        }
但是它说我有一个字符错误。有没有其他代码可以使用,因为当前代码只会丢弃字符,因此不会仅从[]提取数据。数据应该显示在我创建的几个文本框中。有人能帮我吗?

您可以使用正则表达式:

        string strLine = "[1] [apple] [market]";
        string[] arr1 = strLine.Split('[');
        foreach (string str in arr1)
        {
            string[] arr2 = str.Split(']');
            Console.WriteLine(arr2[0]);
        }
您可以使用regex执行此操作:


作为使用正则表达式的替代方法,您可以使用Split两次将部分作为IEnumerable获取,一次获取每个分隔字符串的开头,一次切断每个结果字符串中结束分隔符之后的所有内容

var str1 = "[2][toy]asdv[shop]sdvdsrdt";

str = str1.Split('[').Skip(1)
          .Where(x => x.Contains(']'))
          .Select(x => x.Split(']').First());

foreach (var s in str)
    Console.WriteLine (s);

> 2
> toy
> shop
编辑:要从文件中进行编辑,只需循环


作为使用正则表达式的替代方法,您可以使用Split两次将部分作为IEnumerable获取,一次获取每个分隔字符串的开头,一次切断每个结果字符串中结束分隔符之后的所有内容

var str1 = "[2][toy]asdv[shop]sdvdsrdt";

str = str1.Split('[').Skip(1)
          .Where(x => x.Contains(']'))
          .Select(x => x.Split(']').First());

foreach (var s in str)
    Console.WriteLine (s);

> 2
> toy
> shop
编辑:要从文件中进行编辑,只需循环


我已经尝试过该代码,它在concole上工作,但在从文本文件检索数据时遇到问题。@user3789007添加了一个从文件读取数据的示例。[]部分是逐行匹配的,因为您的示例仅显示了这一点。如果它们重叠换行符,您可以使用它,它的缺点是将整个文件加载到内存中。谢谢,它正在工作。再问一个问题。我可以选择数据并将其放入多个文本框中吗?例如,第一个数据将由3个文本框分隔。所以文本框将显示数据1、苹果和市场。@user3789007我不确定我是否理解这个问题。代替循环,您可以对结果进行数组排列,并将结果用作常规数组。如果你想填充几个文本框,也许这会让事情变得更容易些?ToArray??我们不能直接使用代码并将其重新排列到文本框吗?如果不能,我该如何排列??抱歉,我是这方面的新手。我已经尝试过代码,它在concole上工作,但在从文本文件检索数据时遇到问题。@user3789007添加了一个从文件读取数据的示例。[]部分是逐行匹配的,因为您的示例仅显示了这一点。如果它们重叠换行符,您可以使用它,它的缺点是将整个文件加载到内存中。谢谢,它正在工作。再问一个问题。我可以选择数据并将其放入多个文本框中吗?例如,第一个数据将由3个文本框分隔。所以文本框将显示数据1、苹果和市场。@user3789007我不确定我是否理解这个问题。代替循环,您可以对结果进行数组排列,并将结果用作常规数组。如果你想填充几个文本框,也许这会让事情变得更容易些?ToArray??我们不能直接使用代码并将其重新排列到文本框吗?如果不能,我该如何排列??抱歉,我是这方面的新手。我在尝试从文本文件提取数据时遇到问题。有没有办法让我从文本文件中获取它?我能够向multitextbox显示文本文件,但当我尝试您的代码时,它会产生错误。我在尝试从文本文件提取数据时遇到问题。有没有办法让我从文本文件中获取它?我能够向multitextbox显示文本文件,但当我尝试您的代码时,它会产生错误
foreach(var line in File.ReadLines("test.txt")) {

    IEnumerable<string> str;

    str = line.Split('[').Skip(1)
        .Where(x => x.Contains(']')).Select(x => x.Split(']').First());

    foreach (var s in str)
        Console.WriteLine (s);
}