2012-10-30 2 views
1

다음은이 두 행 사이에 중간 문자 만 추출하려고하는 시나리오입니다. 내 기본적인 요구 사항은powershell을 사용한 정규 표현

(.*).<required code>.(.*) 

사람이 나를 도와 주 시겠어요 접두사와 접미사에 올 수있는 두 개의 점 무엇이든간에 아무것도 exract하는

"scvmm.new.resources" --> This after an regular expression match should return only "new" 
"sc.new1.rerces" --> This after an regular expression match should return only "new1" 

무엇 이었는가?

+0

나는 오타를 추측합니다. :) 지금 수정했습니다. – PowerShell

답변

3

정규식을 사용하지 않고도이 작업을 수행 할 수 있습니다. 문자열을 '.'에 나눕니다. 이처럼

PS> "scvmm.new.resources".Split('.')[1] 
new 
+0

똑똑한 shay, 나는 결코 이것에 대해 생각조차하지 않았습니다. – PowerShell

1

:

([regex]::Match("scvmm.new1.resources", '(?<=\.)([^\.]*)(?=\.)')).value 
+0

고마워 Christian – PowerShell

2

또는이

'scvmm.new.resources' -replace '.*\.(.*)\..*', '$1' 
+0

대체처럼, 나는 똑같은 방식으로합니다. – stej

0

당신은 실제로하지 않는 등 사소한 부분 문자열 추출을위한 정규 표현식이 필요하고 중간 요소를 잡아. 셰이의 Split('.') 하나

$s = "scvmm.new.resources" 
$l = $s.IndexOf(".")+1 
$r = $s.IndexOf(".", $l) 
$s.Substring($l, $r-$l) # Prints new 

$s = "sc.new1.rerces" 
$l = $s.IndexOf(".")+1 
$r = $s.IndexOf(".", $l) 
$s.Substring($l, $r-$l) # Prints new1 

,과 같이 유사한 효과를 IndexOf()을 사용할 수 있습니다처럼이 점의 선두로부터 보인다. 그런 다음 첫 번째 충돌 후 점의 첫 번째 발생을 찾습니다. 그런 다음 두 위치 사이의 문자를 추출합니다. 예를 들어, 분리 문자가 동일하지 않은 시나리오에서 유용합니다 (많은 경우에 Split() 방법이 유용 할지라도).