【问题标题】:How to get matched string from Regex? [C#]如何从正则表达式中获取匹配的字符串? [C#]
【发布时间】:2013-02-20 13:04:34
【问题描述】:

我有以下代码:

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 获取匹配的字符串。我该怎么做?

【问题讨论】:

  • 你从来没有真正使用过滤器,那么结果如何?
  • 我愿意。我只是忘了复制它。甚至都无所谓
  • 怎么不重要?检查结果的方法不止一种,正如最新答案所示(我实际上怀疑这是您想要的方法)。但除此之外,如果你不知道自己在做什么,根据定义,你怎么知道这无关紧要?废话。

标签: c# .net regex winforms


【解决方案1】:

使用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);
    }    
}

【讨论】:

  • 如何获得匹配的字符串?我的意思是我有“xxaajj8589jfa”。我只想要8589
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    相关资源
    最近更新 更多