从文本文件中只读取[Brackets]字符串

时间:2018-06-19 06:20:18

标签: c# .net

我有一个名为hello.txt的文本文件,其中包含以下文字:

  

[你好]这是堆栈溢出,我很喜欢[THIS]。我用[Stack]   寻求帮助。

我只想在列表框中添加[ ](括号字符串)。

我试过了:

using (StringReader reader = new StringReader(File Location))
{
    string line;

    while ((line = reader.ReadLine()) != null)
    {
        string input = line;
        string output = input.Split('[', ']')[1];
        MessageBox.Show(output);
    }
}

但这对我不起作用。

4 个答案:

答案 0 :(得分:3)

这就是你要找的东西

string a = "Someone is [here]";
string b = Regex.Match(a, @"\[.*?\]").Groups[0].Value;
Console.WriteLine(b);

//or if you need all occurences
foreach(Match match in Regex.Matches(a, @"\[.*?\]"))
{
    Console.WriteLine(match.Groups[0].Value);
}

答案 1 :(得分:1)

您可以使用正则表达式,如:

var pattern = @"\[[^\]]*]";
while ((line = reader.ReadLine()) != null) {
    var matches = Regex.Matches(line, pattern);

    foreach (var m in matches) {
        MessageBox.Show(m);
    }
}

此模式在方括号之间查找不是右方括号的任何内容。

如果您希望括号之间没有括号本身,可以修剪每个匹配的括号:

MessageBox.Show(m.Value.Substring(1, m.Value.Length - 2));

或者您可以使用此模式:

var pattern = @"\[([^\]]*)]";
while ((line = reader.ReadLine()) != null) {
    var matches = Regex.Matches(line, pattern);

    foreach (Match m in matches) {
        MessageBox.Show(m.Groups[1]);
    }
}

答案 2 :(得分:1)

您可以为此创建一个函数,它接受三个参数的第一个输入字符串,起始字符串和结束字符串以及返回这两个字符串之间的值列表

private static IEnumerable<string> GetListOfString(string input, string start, string end)
{
   var regex = new Regex(Regex.Escape(start) + "(.*?)" + Regex.Escape(end));
   var matches = regex.Matches(input);
   return (from object match in matches select match.ToString()).ToList();
}

答案 3 :(得分:0)

这是使用LINQ

执行此操作的另一种方法
string[] text = "[Hello] this is stack overflow and I Love [THIS] a lot. I use [Stack] for help.".Split(' ');
var wantedString = text.Where(s => s.StartsWith("[") && s.EndsWith("]"));
   foreach(string word in wantedString)
      {
           Console.WriteLine(word);
      }