2015-02-10 261 views

回答

5

正則表達式也可以執行此任務。這是一個可以工作的例子。它將與「大黃蜂喬」

$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" 
+0

它似乎只適用於替換字符串是文字。 – nickm 2015-02-10 17:56:29

+0

這是唯一的情況,因爲它被括在單引號中。我可以更新答案來解釋這一點。 – Matt 2015-02-10 18:05:45

+0

現在它完美的工作。謝謝。 – nickm 2015-02-11 07:39:18

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) 
} 
+0

是什麼'$ newstr'更換一個變量?你不只需要用戶正在尋找的原始字符串和子字符串? – 2017-11-07 00:19:05

+0

OP需要*替換*子字符串,而不僅僅是刪除它 – 2017-11-07 08:29:31

相關問題