使用C#中的正则表达式从字符串中捕获COM
我想从WMI存储的查询结果中捕获COM和任何数字。我的WMI查询字符串结果是:mbed串行端口(COM3),但并不总是COM3。我试图使用使用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;
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网站。这将派上用场:-)