4
我試圖替換Powershell中的部分字符串。使用Powershell中的函數替換
$text = "the image is -12345-"
$text = $text -replace "-(\d*)-", 'This is the image: $1'
Write-Host $text
這給了我正確的結果: 「這是圖像:12345」然而,替換字符串沒有硬編碼的,它是從一個函數計算
現在,我想包括以base64編碼的圖像。我可以從ID讀取圖像。我希望下面的工作,但它並不:
function Get-Base64($path)
{
[convert]::ToBase64String((get-content $path -encoding byte))
}
$text -replace "-(\d*)-", "This is the image: $(Get-Base64 '$1')"
的原因,這是行不通的,是因爲它首先通過$1
(字符串,而不是$1
值)的功能,執行它,然後才執行替換。我想要做的就是
- 查找模式
- 的發生與模式
- 對於每個替換每次出現時替換:
- 傳遞捕獲組的功能
- 使用值的捕獲組獲得base64映像
- 將base64映像注入到替換中
對於那些希望瞭解其推導的人,它使用'Replace'方法的標記([Regex.Replace方法(String,MatchEvaluator)](https://msdn.microsoft.com/en-us/library /cft8645c%28v=vs.110%29.aspx)),通過允許對匹配的參數進行計算,爲正則表達式增加了更多的功能。整潔的事情是 - 我直到看到這個答案時才意識到 - 是一個PowerShell腳本塊顯然與MatchEvaluator參數兼容! –