我有以下字符串
$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
重复该次数。