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

时间:2016-03-24 06:57:21

标签: powershell

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

name_something_else_10
another_name_200
what_ever_you_like_1234567

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

name_something_else
another_name
what_ever_you_like

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

$newString = CutOffEveryAfterUnderscore $oldString

2 个答案:

答案 0 :(得分:6)

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

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

    $string -replace '_[^_]*$'
}

现在您可以使用它:

$newString =  Remove-LastUnderscore $oldString

或没有功能:

$newString =  $oldString -replace '_[^_]*$'

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

答案 1 :(得分:4)

一种方法:

function Get-Prefix
{
    param($str)
    return $str.substring(0, $str.lastindexof('_'))
}

$strings = @("name_something_else_10",
    "another_name_200",
    "what_ever_you_like_1234567"
)

$strings | %{
    Get-Prefix $_
}