使用C#中的正则表达式从字符串中捕获COM

使用C#中的正则表达式从字符串中捕获COM,c#,regex,wmi,C#,Regex,Wmi,我想从WMI存储的查询结果中捕获COM和任何数字。我的WMI查询字符串结果是:mbed串行端口(COM3),但并不总是COM3。我试图使用Match Match=Regex.Match(wmiresult,@“\bCOM\b.*\b\d\b”)但该正则表达式并不成功。如何使用C#和正则表达式实现这一点 static void Main(string[] args) { try { string wmiresult;

我想从WMI存储的查询结果中捕获COM和任何数字。我的WMI查询字符串结果是:mbed串行端口(COM3),但并不总是COM3。我试图使用
Match Match=Regex.Match(wmiresult,@“\bCOM\b.*\b\d\b”)但该正则表达式并不成功。如何使用C#和正则表达式实现这一点

    static void Main(string[] args)
    {
        try
        {
            string wmiresult;

            ManagementObjectSearcher searcher =
                new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE Caption like '%mbed% %Serial% %Port% %(COM%'");

            foreach (ManagementObject queryObj in searcher.Get())
            {
                wmiresult = queryObj["Caption"].ToString();

                // Here we call Regex.Match.
                Match match = Regex.Match(wmiresult, @"\bCOM\b.*\b\d\b");

                // Here we check the Match instance.
                if (match.Success)
                {
                    Console.WriteLine(match.Value);
                }
               MessageBox.Show(queryObj["Caption"].ToString());
            }
        }
        catch (ManagementException e)
        {
            MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
        }

        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }

*
有什么用

regex
\bCOM\b.*\b\d\b
中的问题是,在目标字符串“COM3”中,最后一个字母和数字之间没有空格。字母和数字都是“单词”字符,在
\w
中表示,因此没有单词边界

试试看

\bCOM\d+\b

查看它

此正则表达式将匹配COM1、COM2、COM3等。。。它将不匹配COM0,但仍将匹配COM10

\bCOM[1-9][0-9]*\b

非常感谢。这是意料之中的事。正则表达式总是把我弄糊涂。感谢Regexr网站。这将派上用场:-)