MatchCollection给出错误C#

时间:2016-09-14 09:32:24

标签: c# regex match

我正在处理一个字符串,并希望在C#中使用MatchCollection和Regex捕获两个字符之间的两个子字符串。它给出了一些逻辑错误"指定的参数超出了有效值的范围。参数名称:i" 测试字符串:"一个快速的#brown fox&跳过+懒狗&#34 ;;

        b2 = "A quick #brown fox& jumps over+ the lazy dog";
        Regex r = new Regex(@"#(.+?)&");
        MatchCollection mc = r.Matches(b2);
        string match1 = (mc[0].Groups[1].Value);

        Regex r1= new Regex(@"$(.+?)+");
        MatchCollection mc1 = r1.Matches(b2);  //giving error at this line
        string match2 = (mc1[0].Groups[1].Value);
        MessageBox.Show("Match1: " + match1 + "... Match2: " + match2);
  

我想要打印:Match1:棕色狐狸...... Match2:棕色狐狸&跳过

1 个答案:

答案 0 :(得分:1)

$(.+?)+正则表达式毫无意义,因为它匹配字符串的结尾与$,然后匹配换行符以外的1 +字符,1次或更多次。这是与任何文本都不匹配的正则表达式的示例,与$a相同。

没有匹配项,因此mc1为空,因此当您使用mc1[0]时会抛出异常。

你一定意味着

@"#([^+]+)\+"

请参阅regex demo

详细

  • # - 哈希符号
  • ([^+]+) - 第1组捕获+
  • 以外的1个或多个字符
  • \+ - 文字加号。