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

时间:2016-07-13 11:29:03

标签: regex powershell replace expression

我有以下字符串

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

我希望用一串问号替换花括号中的数字,n个字符长

作为一个例子,我希望它返回'blah_????_?????_blah_????-??.CSV'

到目前为止,我有这个,但似乎无法实现“扩张”。在替换工作

[regex]::Replace($FileNamePattern,'{(\d+)}','"?"*$1')

非常感谢任何帮助!

马修

1 个答案:

答案 0 :(得分:2)

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

$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次。

enter image description here