在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
答案 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 $_
}