2011-04-29 109 views

回答

6

嘗試正則表達式:

$foo = 'something_of_unknown' -replace 'something.*','something' 

或者,如果你只知道部分的'某事',然後例如

'something_of_unknown' -replace '(some[^_]*).*','$1' 
'some_of_unknown' -replace '(some[^_]*).*','$1' 
'somewhatever_of_unknown' -replace '(some[^_]*).*','$1' 

$1是參照組中括號(所述(some[^_]*)一部分)。

編輯(後更改的問題):

如果使用正則表達式,則需要特殊字符進行轉義:

"\\unknowntext1\alwaysSame\unknowntext2" -replace '\\\\unknowntext1.*', '\\unknowntext1' 

或(另一個正則表達式魔術)使用回顧後是這樣的:

"\\unknowntext1\alwaysSame\unknowntext2" -replace '(?<=\\\\unknowntext1).*', '' 

(這是:取任何東西(.*),但是在它之前必須有\\unknowntext1'(?<=\\\\unknowntext1))並將其替換爲空字符串。

編輯(最後)

如果你知道有東西在中間(的alwaysSame)知道,這可能幫助:

"\\unknowntext1\alwaysSame\unknowntext2" -replace '(.*?)\\alwaysSame.*', '$1' 
+0

請downvote我,我吸。 – AshClarke 2011-04-29 12:26:32

+0

編輯答案,但正如我現在看到的,我不得不再次編輯它;) – stej 2011-04-29 12:28:59

5
function Remove-TextAfter { 
    param (
     [Parameter(Mandatory=$true)] 
     $string, 
     [Parameter(Mandatory=$true)] 
     $value, 
     [Switch]$Insensitive 
    ) 

    $comparison = [System.StringComparison]"Ordinal" 
    if($Insensitive) { 
     $comparison = [System.StringComparison]"OrdinalIgnoreCase" 
    } 

    $position = $string.IndexOf($value, $comparison) 

    if($position -ge 0) { 
     $string.Substring(0, $position + $value.Length) 
    } 
} 

Remove-TextAfter "something_of_unknown" "SoMeThInG" -Insensitive 
+0

感謝您的'System.StringComparison'格式。 ; ^) – ruffin 2014-10-21 14:48:12

3

什麼我是$ var =「\ unknowntext1 \ alwaysSame \ unknowntext2」

我只需要保留「\ unknowntext1「

不確定這需要一個正則表達式。假設alwaysSame簡直是始終不變的,圍繞stej的答案的討論表明,似乎是迄今爲止最直接的方式來完成,這將是:

$var.substring(0, $var.indexOf("\alwaysSame"));

+0

這怎麼回答這個問題呢?如果你有'$ var =「\\ unknowntext1 \ alwaysSame \ unknowntext2」'並運行'$ var.substring(0,$ var.indexOf(「\ alwaysSame」));',你會得到'\\ unknowntext1', * QED *。令人驚訝的是,其他答案是非常平淡無奇的。 – ruffin 2014-10-21 16:38:00

+0

我注意到你(哈希姆和盧卡斯)在你的個人資料中都沒有'powershell'標記。 Powershell代碼行總是*將結果發送到「管道」,如果這是拋出你。我的答案中的這一陳述將「返回」OP要求的價值;每個PowerShell代碼行都有點像隱式函數,可以鏈接到另一個後續命令。我可以看到這可能會讓你感到困惑。我還編輯了答案,以使我的意圖更加清晰,非PS用戶。 – ruffin 2014-10-21 16:47:36