如何从正则表达式中获取匹配的字符串?[C#]

5
我有以下代码:

我有以下代码:

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
你从未真正“使用”过过滤器,那么会有什么结果呢? - Grant Thomas
我有做,只是忘了复制。而且这也不重要。 - Billie
1
怎么不重要呢?检查结果的方法不止一种,正如最新的回答所展示的那样(实际上我猜想这是你不想要的方法)。但除此之外,如果你不知道自己在做什么,根据定义,你怎么能知道它不重要呢?胡说八道。 - Grant Thomas
2个回答

8

使用Regex.IsMatch方法检查正则表达式是否在输入字符串中找到匹配项。例如:

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

顺带提一下,[0-9]*将匹配任何内容,因为你没有要求输入字符串中必须有数字。可能你需要使用^\d+$

更新:获取匹配的数字:

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

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

1
我该如何获取匹配的字符串?我的意思是,我有一个“xxaajj8589jfa”。我只想要8589。 - Billie

6
为了找到所有匹配项,您需要使用.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);
      }
    }
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接