2011-04-29 110 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