如何用powershell删除部分字符串?

Ale*_*lex 1 powershell

在powershell中,我有不同的字符串,例如以下内容(3个不同的例子):

name_something_else_10
another_name_200
what_ever_you_like_1234567
Run Code Online (Sandbox Code Playgroud)

我希望在最后一个下划线之后删除所有内容.所以我想得到的是以下内容:

name_something_else
another_name
what_ever_you_like
Run Code Online (Sandbox Code Playgroud)

每个字符串都作为变量提供,我也需要变量中的结果.我当时正在寻找的是如何通过使用如下函数来剪切字符串的一部分:

$newString = CutOffEveryAfterUnderscore $oldString
Run Code Online (Sandbox Code Playgroud)

Mar*_*ndl 6

您可以使用'_[^_]*$'replace函数结合的正则表达式():

function Remove-LastUnderscore
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$true,Position=0)]
        [string]
        $string
    )

    $string -replace '_[^_]*$'
}
Run Code Online (Sandbox Code Playgroud)

现在您可以使用它:

$newString =  Remove-LastUnderscore $oldString
Run Code Online (Sandbox Code Playgroud)

或没有功能:

$newString =  $oldString -replace '_[^_]*$'
Run Code Online (Sandbox Code Playgroud)

注意:此解决方案也适用于没有下划线的字符串.