2011-11-15 3 views
3

PnPID에서 공급 업체 ID 및 장치 ID의 값을 가져 오려고합니다. 예를 들어, 아래 문자열에서 공급 업체 ID "8086"및 장치 ID "24D5"를 가져 오려고합니다.PnPID를 구문 분석하는 정규식

pci\ven_8086&dev_24D5&subsys_02871014 

내 코드

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

(C#으로)입니다 그러나 이것은 나를 위해 추가하는 설정 "DEV_"을 제거하지 않습니다, 그것은 16 진 숫자를 포함하는 장치 ID와 일치 할 수 없다. 올바른 표현은 무엇입니까?

답변

3

당신은 괄호를 사용하여 그룹을 만들 수 있습니다

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

그런 다음 두 번째 그룹에 그냥 자리 (첫째 항상 전체 정규식과 일치되는 문자열을 위해 예약되어 있습니다)를 얻을 것이다.

는 16 진 값을 사용 일치 시키려면 : - 장치 및 공급 업체 -

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