提取字符" ["和角色"]"使用c#从文本文件

时间:2014-06-30 04:54:14

标签: c#

我有一个文本文件,其中包含以下数据

[1] [apple] [market]

[2][toy]asdv[shop]sdvdsrdt

我只想要[]之间的数据。 []之外的人将被丢弃。 我试过了代码

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

        foreach (string line in lines)
        {
            Console.WriteLine(line);
        }

但它说我有一个char错误。我可以使用任何其他代码,因为当前代码只会丢弃该字符,因此不会仅从[]中提取数据。数据应该显示在我创建的几个文本框中。有人可以帮助我吗?

3 个答案:

答案 0 :(得分:3)

您可以使用regex

执行此操作
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = "[1] [apple] [market]";
            string s2 = "[2][toy]asdv[shop]sdvdsrdt";

            foreach(Match m in Regex.Matches(s, @"\[(.*?)\]"))
            {
                Console.WriteLine(m.Groups[1]);
            }

            foreach (Match m in Regex.Matches(s2, @"\[(.*?)\]"))
            {
                Console.WriteLine(m.Groups[1]);
            }
        }
    }
}

[OUTPUT]
1
apple
market
2
toy
shop

答案 1 :(得分:1)

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

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

编辑:要从文件中执行此操作,您可以循环遍历File.ReadLines;

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

答案 2 :(得分:0)

        string strLine = "[1] [apple] [market]";
        string[] arr1 = strLine.Split('[');
        foreach (string str in arr1)
        {
            string[] arr2 = str.Split(']');
            Console.WriteLine(arr2[0]);
        }