/ / Espressione regolare di Powershell per sostituire una cifra con una stringa di lunghezza variabile - regex, powershell, replace, expression

Espressione regolare di Powershell per sostituire una cifra con una stringa di lunghezza variabile: regex, powershell, replace, expression

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.

inserisci la descrizione dell'immagine qui