2016-07-13 10 views
2

ersetzen Ich habe die folgende ZeichenfolgePowershell regulärer Ausdruck eine Ziffer mit einem String mit variabler Länge

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

und ich möchte die Zahlen in den geschweiften Klammern mit einer Reihe von Fragezeichen ersetzen, n Zeichen lang

Als Beispiel ich es dies bisher 'blah_????_?????_blah_????-??.CSV'

ich habe zurückkommen würde, aber kann nicht scheinen, die ‚Expansion‘ in den ersetzen Arbeits

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

Jede Hilfe wäre sehr willkommen!

Matthew

+0

Versuchen Sie, die geschweiften Klammern Ihrer regulären Ausdruck Backslash. – Bentoy13

Antwort

2

Sie müssen die Verarbeitung des Spiels in einer Callback-Methode tun:

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

Die Regex {(\d+)} Spiele { und } und Captures 1+ Ziffern dazwischen. Das Sub-Match wird als Integer innerhalb des Callbacks geparst (siehe [int]$match.Groups[1].Value) und dann wird ? so oft mit "?" * [int]$match.Groups[1].Value wiederholt.

enter image description here