处理正则表达式时出错

时间:2014-07-01 05:21:55

标签: c# regex split text-files

hye,我收到了这个错误"未处理的类型' System.ArgumentOutOfRangeException'发生在System.dll"在做这个拆分代码时。错误发生在代码textBox1.Text = mc [0] .Groups [1] .Value;

        var desiredText = File.ReadLines(location).ElementAt(i);
        string s = desiredText.ToString();
        //textBox3.Text = s;
        Regex r = new Regex(@"[(.+?)]");
        MatchCollection mc = r.Matches(s);
        textBox1.Text= mc[0].Groups[1].Value;
        textBox2.Text= mc[1].Groups[1].Value;
        textBox3.Text = mc[2].Groups[1].Value;

我哪里做错了?我使用的文本文件有这个数据

[1] [apple] [market]
[2][toy]asdv[shop]sdvdsrdt

3 个答案:

答案 0 :(得分:1)

您的正则表达式应该escape the square brackets

Regex r = new Regex(@"\[(.+?)\]");

答案 1 :(得分:1)

在Regex中,[Brackets]定义了一个字符类

  • 在正则表达式中,[brackets]具有特殊含义:它们定义了一个字符类。字符类与其包含的字符之一匹配。例如,[abc]匹配abc。您还可以定义范围:[a-c]匹配相同的字符。
  • 因此,正则表达式[(.+?)]匹配一个()+?
  • 的单个字符
  • 要匹配实际括号,您需要使用\转义它们。这就是你想要的:\[(.+?)\]

因此,在C#中:

Regex r = new Regex(@"\[(.+?)\]");

<强>参考

Character Classes or Character Sets

答案 2 :(得分:1)

您拥有括号的方式,正则表达式引擎将其视为与Character Class匹配的任何放置在其中的字符。您需要escape括号以匹配文字。

string s = @"[1] [apple] [market]";

Regex r = new Regex(@"\[(.+?)\]");
MatchCollection mc = r.Matches(s);

Console.WriteLine(mc[0].Groups[1].Value); //=> 1
Console.WriteLine(mc[1].Groups[1].Value); //=> apple
Console.WriteLine(mc[2].Groups[1].Value); //=> market