2013-02-20 100 views
-1

我有以下代碼:如何從Regex獲取匹配的字符串? [C#]

private void button_borrow_Click(object sender, EventArgs e) 
    { 
     Regex filter = new Regex(@"[0-9]*"); 
     String items = ""; 
     var selectedItems = checkedListBox_bookview.CheckedItems; 
     foreach (var item in selectedItems) 
     { 

     } 
     MessageBox.Show(items.ToString() + " Were selected: " + selectedItems.Count); 
    } 

我想從filter得到匹配的字符串。我該怎麼做?

+1

你從來沒有真正_use_過濾器,所以什麼結果? – 2013-02-20 13:07:59

+0

我會的。我忘了複製它。它甚至不重要 – Billie 2013-02-20 13:09:17

+1

這怎麼沒關係?檢查結果的方式不止一種,正如最新的答案所證明的(我確實懷疑這是您不想要的方法)。但除此之外,如果你不知道自己在做什麼,按照定義,你怎麼知道這並不重要?廢話。 – 2013-02-20 13:11:04

回答

2

使用Regex.IsMatch方法檢查正則表達式是否在輸入字符串中找到匹配項。 E.g

foreach (var item in selectedItems) 
    { 
     if (filter.IsMatch(item.ToString()) 
      // matched 
    } 

記住BTW記住,[0-9]*將匹配任何東西,因爲你不需要任何的數字是在輸入字符串。也許你需要^\d+$

UPDATE:獲得匹配的數量:

Regex filter = new Regex(@"(\d+)"); 

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    var match = filter.Match(item.ToString()); 
    if (match.Success) 
    { 
     MessageBox.Show(match.Value); 
    }  
} 
+0

如何獲得metched字符串?我的意思是我有「xxaajj8589jfa」。我只想要8589 – Billie 2013-02-20 13:19:05

0

要找到所有你需要使用.Matches()和迭代返回的集合相匹配。

另一個好的做法是編譯你的正則表達式,這樣你不會在每次執行時都會遇到性能問題,這樣做可以將它分配給類中的靜態字段並使用「RegexOptions.Compiled」。

這裏有一個小例子,它可以很容易地修改,以支持您的方案:

class Program { 
    private static Regex _filterRegex = new Regex(@"[0-9]+", RegexOptions.Compiled); 

    static void Main(string[] args) { 
     foreach (Match match in _filterRegex.Matches("1,2,3,4,5,6")) { 
     Console.WriteLine("Match: " + match.Value); 
     } 
    } 
    } 
相關問題