How can you replace the last occurrence of a substring in a string?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
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"
回答2:
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)
}