gpt4 book ai didi

regex - 在 Powershell 中使用函数替换

转载 作者:行者123 更新时间:2023-12-04 05:06:35 25 4
gpt4 key购买 nike

我正在尝试替换 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图像注入(inject)替换
  • 最佳答案

    PetSerAl's helpful answer是您在 Windows PowerShell 中的唯一选择,从 v5.1 开始。

    PowerShell Core v6.1+ 现在通过增强-replace接线员 ,这样就无需调用 [regex]::Replace() :

    就像 [regex]::Replace() , 你现在可以:

  • 将脚本 block 作为 -replace 传递替换操作数,必须返回替换字符串,
  • 除了手头的匹配(类型为 [System.Text.RegularExpressions.Match] 的实例)表示为自动变量 $_ ,就像 PowerShell 中的习惯一样。

  • 适用于您的案例:
    $text -replace "-(\d*)-", { "This is the image: $(Get-Base64 $_.Groups[1].Value)" }

    一个更简单的例子:
    # Increment the number embedded in a string:
    PS> '42 years old' -replace '\d+', { [int] $_.Value + 1 }
    43 years old

    关于regex - 在 Powershell 中使用函数替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30666101/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com