2013-02-20 97 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); 
     } 
    } 
    } 
相关问题