用于解析PnPID的正则表达式

时间:2011-11-15 10:11:28

标签: c# regex

我想从PnPID获取供应商ID和设备ID的值,例如,我想从下面的字符串中获取供应商ID“8086”和设备ID“24D5”。

pci\ven_8086&dev_24D5&subsys_02871014

我的代码是(在C#中)

Regex rx = new Regex(@"dev_\d+", RegexOptions.IgnoreCase);
string text = @"pci\ven_8086&dev_2425&subsys_02871014";
MatchCollection matches = rx.Matches(text);
foreach (Match match in matches)
{
    Console.WriteLine(watch);
}

但这并没有为我删除前缀“dev_”,也无法匹配包含十六进制数字的设备ID。什么是正确的表达方式?

1 个答案:

答案 0 :(得分:3)

您必须使用括号创建一个组:

new Regex(@"dev_(\d+)", RegexOptions.IgnoreCase);

然后在第二组中,您将只获得数字(第一个总是为整个正则表达式匹配的字符串保留)。

要匹配十六进制值,请使用:

new Regex(@"dev_([0-9a-f]+)", RegexOptions.IgnoreCase);

要在一个正则表达式中匹配 - 设备和供应商 - ,请使用:

new Regex(@"ven_([0-9a-f]+)&dev_([0-9a-f]+)", RegexOptions.IgnoreCase);