2013-10-30 6 views
1
"LIM-1-2::PROVPEC=NTK552DA,CTYPE=\"LIM C-Band\":OOS-AU,UEQ" 
"2XOSC-1-4::PROVPEC=NTK554BA,CTYPE=\"OSC w/WSC 2 Port SFP 2 Port 10/100 BT\":OOS-AU,UEQ" 
"P155M-1-4-1::PROVPEC=NTK592NP,CTYPE=\"OC-3 0-15dB CWDM 1511 nm\":OOS-AU,UEQ" 

파일에이 데이터가 있습니다. 나는 첫 번째 장비에 대해 -1-2를 추출해야하며, 마지막 장비에 대해서는 -1-4-1을 추출해야합니다. 나중에이 데이터를 사용하겠습니다. 나는 -1-1을 얻는 방법을 알아낼 수 있지만 -1-1-4도 얻을 수있는 다용도가 아닙니다.정규 표현식을 디자인 할 때 도움이 필요합니다.

장비에 서브 슬롯이있을 수도 있습니다.이 목록은 임시 표기입니다. EQP-shelf-slot-subslot. 나는 서브 슬롯의 존재 여부를 폼 -shelf 슬롯 - 서브 슬롯 또는 -shelf 슬롯에 나를 제공 여부를 확인 할 수있는 몇 가지 표현을 필요

+3

확실하지 않은 점은 확실합니다. 여기서는 정규식을 사용하지 않고 첫 번째'::'로 분할 한 다음 첫 번째'-'로 다시 분할합니다. –

+1

지금까지 가지고있는 게시물을 올리시겠습니까? –

+0

@David Parsson ($ commandline = ~ /\".*(-.-.).* PROVPEC = (. *?), /) –

답변

1

방법에 대해 :

my ($wanted) = $str =~ /^\w+([^:]+)/; 

또는, 따옴표의 일부인 경우 문자열 :

my ($wanted) = $str =~ /^"\w+([^:]+)/; 
+0

'''는 부분 파일 내용입니다. – jkshah

+1

큰 따옴표는 OP 데이터의 일부이므로 "/"\ w + ([^ :] +) /'가 더 적합 할 수 있습니다. – Kenosis

+0

@Kenosis 그것은 출력을주지 않습니다. my $ String = " LIM-1-1 :: PROVPEC는 = NTK552DA, CTYPE = "; 내 $ 문자열 1 ="ENT-Eqpt의 :: P155M-1-4-1 : P155M1 :: NTK592NP는 :: "있는; 경우 ($ 문자열 =/"\ w + ([^ :] +) /) { 인쇄"AID = $ 1 \ n "; } –

관련 문제