2016-09-14 31 views
0

我正在處理一個字符串,並希望在C#中使用MatchCollection和Regex在兩個字符之間捕獲兩個子字符串。它給出了一些邏輯錯誤「指定的參數超出了有效值的範圍。參數名稱:i」 測試字符串:「快速#brown狐狸&跳過+懶狗」;MatchCollection給出錯誤C#

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

我想這對打印:匹配1:棕色狐狸...... MATCH2:棕色狐狸&躍過

回答

1

$(.+?)+正則表達式是沒有意義的,因爲它的字符串與$結束匹配然後1+字符以外的換行符,1次或更多次。這是一個與任何文本都不匹配的正則表達式的示例,與$a相同。

沒有匹配,因此mc1爲空,因此使用mc1[0]時會引發異常。

您一定意味

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

regex demo

詳細

  • # - 散列符號
  • ([^+]+) - 第1組捕捉1個或多個字符以外+
  • \+ - 文字加號。