powershell:从字符串末尾删除文本

Ash*_*rke 5 powershell

- 删除早期文本 - 我问错了问题!

啊哈....

我拥有的是什么 $var = "\\unknowntext1\alwaysSame\unknowntext2"

我只需要保留 "\\unknowntext1"

ste*_*tej 6

尝试正则表达式:

$foo = 'something_of_unknown' -replace 'something.*','something'
Run Code Online (Sandbox Code Playgroud)

或者,如果你只知道'某事',那么,例如

'something_of_unknown' -replace '(some[^_]*).*','$1'
'some_of_unknown' -replace '(some[^_]*).*','$1'
'somewhatever_of_unknown' -replace '(some[^_]*).*','$1'
Run Code Online (Sandbox Code Playgroud)

$1是参照组中括号(的(some[^_]*)一部分).

编辑(更改后的问题):

如果使用正则表达式,则需要转义特殊字符:

"\\unknowntext1\alwaysSame\unknowntext2" -replace '\\\\unknowntext1.*', '\\unknowntext1'
Run Code Online (Sandbox Code Playgroud)

或(另一个正则表达式魔术)使用这样的lookbehind:

"\\unknowntext1\alwaysSame\unknowntext2" -replace '(?<=\\\\unknowntext1).*', ''
Run Code Online (Sandbox Code Playgroud)

(这是:取任何东西(.*),但必须\\unknowntext1在它之前('(?<=\\\\unknowntext1))并用空字符串替换它.

编辑(最后)

如果你知道中间有一些已知的东西alwaysSame,那么这可能会有所帮助:

"\\unknowntext1\alwaysSame\unknowntext2" -replace '(.*?)\\alwaysSame.*', '$1'
Run Code Online (Sandbox Code Playgroud)


ruf*_*fin 6

我所拥有的是 $var = "\unknowntext1\alwaysSame\unknowntext2"

我只需要保留“\unknowntext1”

不确定这是否需要正则表达式。假设alwaysSame字面上总是相同的,正如围绕 stej 答案的讨论所表明的那样,到目前为止,实现这一点的最直接的方法似乎是:

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


Dou*_*nke 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
Run Code Online (Sandbox Code Playgroud)