替换string中最后出现的子字符串

时间:2015-02-10 16:25:42

标签: powershell replace

如何替换字符串中子字符串的 last 出现?

3 个答案:

答案 0 :(得分:5)

正则表达式也可以执行此任务。这是一个可行的例子。它将用“Bumblebee Joe”取代最后一次出现的“水瓶座”

$text = "This is the dawning of the age of Aquarius. The age of Aquarius, Aquarius, Aquarius, Aquarius, Aquarius"
$text -replace "(.*)Aquarius(.*)", '$1Bumblebee Joe$2'
This is the dawning of the age of Aquarius. The age of Aquarius, Aquarius, Aquarius, Aquarius, Bumblebee Joe

贪婪的量词确保它可以在Aquarius的最后一场比赛之前完成所有工作。 $1$2代表该匹配之前和之后的数据。

如果您使用变量进行替换,则需要使用双引号并转义$以进行正则表达式替换,以便PowerShell不会尝试将它们视为变量

$replace = "Bumblebee Joe"
$text -replace "(.*)Aquarius(.*)", "`$1$replace`$2"

答案 1 :(得分:4)

Using the exact same technique as I would in C#

function Replace-LastSubstring {
    param(
        [string]$str,
        [string]$substr,
        [string]$newstr
    )

    return $str.Remove(($lastIndex = $str.LastIndexOf($substr)),$substr.Length).Insert($lastIndex,$newstr)
}

答案 2 :(得分:1)

print(str1[::-1].replace("xx","rr",1)[::-1])