Replacing last occurrence of substring in string

前端 未结 2 1624
野趣味
野趣味 2021-01-06 13:08

How can you replace the last occurrence of a substring in a string?

相关标签:
2条回答
  • 2021-01-06 13:26

    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)
    }
    
    0 讨论(0)
  • 2021-01-06 13:47

    Regular Expressions can also perform this task. Here is an example of one that would work. It will replace the last occurrence of "Aquarius" with "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
    

    The greedy quantifier ensure that it take everything it can up until the last match of Aquarius. The $1 and $2 represent the data before and after that match.

    If you are using a variable for the replacement you need to use double quotes and escape the $ for the regex replacements so PowerShell does not try to treat them as a variable

    $replace = "Bumblebee Joe"
    $text -replace "(.*)Aquarius(.*)", "`$1$replace`$2"
    
    0 讨论(0)
提交回复
热议问题