我有以下字符串

$FileNamePattern =  'blah_{4}_{5}_blah_{4}-{2}.CSV'

我想用一串问号(n个字符长)替换大括号中的数字

作为示例,我希望它返回'blah_????_?????_blah_????-??.CSV'
到目前为止,我已经掌握了,但是似乎无法在替换工作中获得“扩展”
[regex]::Replace($FileNamePattern,'{(\d+)}','"?"*$1')

任何帮助将不胜感激!

马修

最佳答案

您需要在回调方法中进行匹配处理:

$callback = {  param($match) "?" * [int]$match.Groups[1].Value }
$FileNamePattern =  'blah_{4}_{5}_blah_{4}-{2}.CSV'
$rex = [regex]'{(\d+)}'
$rex.Replace($FileNamePattern, $callback)

正则表达式{(\d+)}{}匹配,并在两者之间捕获1个以上的数字。子匹配被解析为回调中的整数(请参阅[int]$match.Groups[1].Value),然后使用?"?" * [int]$match.Groups[1].Value重复该次数。

regex - Powershell正则表达式用可变长度的字符串替换数字-LMLPHP

08-26 15:40