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
答案 0 :(得分:1)
您的正则表达式应该escape the square brackets:
Regex r = new Regex(@"\[(.+?)\]");
答案 1 :(得分:1)
在Regex中,[Brackets]
定义了一个字符类
[brackets]
具有特殊含义:它们定义了一个字符类。字符类与其包含的字符之一匹配。例如,[abc]
匹配a
,b
或c
。您还可以定义范围:[a-c]
匹配相同的字符。[(.+?)]
匹配一个(
,)
,+
或?
\
转义它们。这就是你想要的:\[(.+?)\]
因此,在C#中:
Regex r = new Regex(@"\[(.+?)\]");
<强>参考强>
答案 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