Ho la seguente stringa
$FileNamePattern = "blah_{4}_{5}_blah_{4}-{2}.CSV"
e voglio sostituire i numeri nelle parentesi graffe con una stringa di punti interrogativi, n caratteri lunghi
Ad esempio mi piacerebbe che tornasse "blah_????_?????_blah_????-??.CSV"
Finora l'ho fatto, ma non riesco a ottenere "l'espansione" nella sostituzione funzionante
[regex]::Replace($FileNamePattern,"{(d+)}",""?"*$1")
Qualsiasi aiuto sarebbe molto apprezzato!
Matteo
risposte:
2 per risposta № 1È necessario eseguire l'elaborazione della corrispondenza all'interno di un metodo di callback:
$callback = { param($match) "?" * [int]$match.Groups[1].Value }
$FileNamePattern = "blah_{4}_{5}_blah_{4}-{2}.CSV"
$rex = [regex]"{(d+)}"
$rex.Replace($FileNamePattern, $callback)
Il regex {(d+)}
fiammiferi {
e }
e cattura 1+ cifre intermedie. La submatch viene analizzata come un intero all'interno del callback (vedi [int]$match.Groups[1].Value
) e poi il ?
si ripete quella quantità di volte con "?" * [int]$match.Groups[1].Value
.