gpt4 book ai didi

regex - 如何在我的替换语句中检索 powershell 中对象的值?

转载 作者:行者123 更新时间:2023-12-04 18:48:00 25 4
gpt4 key购买 nike

尝试使用对象映射将月份名称替换为月份编号。用例是我正在尝试重命名包含月份名称的文件。

$monthNameToNumberMap = @{
January = '01'
February = '02'
March = '03'
April = '04'
May = '05'
June = '06'
July = '07'
August = '08'
September = '09'
October = '10'
November = '11'
December = '12'
}

Write-Host "Desired : 02 20 => ";
"February 20" -Replace '([A-z]{3,9}) (\d{2})', "$monthNameToNumberMap[`$1] `$2"

Write-Host "Desired : 05 03 => ";
"May 03" -Replace '([A-z]{3,9}) (\d{2})', "$monthNameToNumberMap[`$1] `$2"

# receiving : @{January=01; February=02; March=03; April=04; May=05; June=06; July=07; August=08; September=09; October=10; November=11; December=12}[February] 20

我无法使用正则表达式匹配组访问对象映射的值。

最佳答案

您正在尝试评估字符串替换模式内的反向引用值,这是不可能的。您需要定义一个回调并将其传递给 [regex]::Replace 方法:

$regex = [regex]'\b([A-Za-z]{3,}) (\d{2})\b'
$callback = { param($m) $monthNameToNumberMap[$m.Groups[1].Value] + " " + $m.Groups[2].Value }
$regex.Replace("February 20", $callback)

请注意[A-z] matches more than just letters ,因此,建议使用[a-zA-Z]

我还添加了单词边界以避免匹配诸如 AAAAAAAAAA 2222222222222222 之类的字符串。

enter image description here

关于regex - 如何在我的替换语句中检索 powershell 中对象的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54951147/

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