2011-11-15 302 views
3

我想從PnPID中獲取供應商ID和設備ID的值,例如,我想從下面的字符串中獲得供應商ID「8086」和設備ID「24D5」。正則表達式解析PnPID

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_」,它不能匹配包含hexdecimal數字的設備ID。什麼是正確的表達?

回答

3

你必須創建使用括號的一組:

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

然後在第二組,你會得到的只是數字(第一總是留給由整個正則表達式匹配的字符串)。

要匹配hexdecimal值使用:

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

同時匹配 - 設備和供應商 - 在一個正則表達式,使用:

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

+1非常好需要什麼解釋。 –

+0

@Lieven謝謝。 :-) – hsz

+0

謝謝關於前綴「dev_」,我可以再多做一步,:) – kennyzx