RegEx Ergebnisse verbinden und neu in Datei schreiben (PowerShell)
Hallo.
Leider komme ich mit einem kleinen Problem aktuell nicht weiter,
und hoffe das mir jemand kurz weiterhelfen kann.
Ich möchte aus einer Datei bestimmte Zeilen auslesen, und die Werte miteinander dann verbinden.
Im Anschluss wieder in die Datei schreiben lassen.
Die RegEx Suchmuster sind in Ordnung, jedoch leider kann ich z.B.
das Ergebnis von RegEx1 nicht mit RegEx2 verbinden.
Beispiel:
Aus '99_01x02_700_' soll dann: '01x0299_01x02_700_' werden.
Mit '+' ($c = $a + $b) und -join habe ich es versucht, was aber leider nicht funktioniert hat.
Hat jemand eine Idee?
Danke für eure Hilfe.
Gruß
Leider komme ich mit einem kleinen Problem aktuell nicht weiter,
und hoffe das mir jemand kurz weiterhelfen kann.
Ich möchte aus einer Datei bestimmte Zeilen auslesen, und die Werte miteinander dann verbinden.
Im Anschluss wieder in die Datei schreiben lassen.
$Dateien = Get-ChildItem "C:\test\"
foreach ($Datei in $Dateien) {
$TXT = Get-Content $Datei
$RegEx1 = @('\d{1,4}_\d{1,2}x\d{1,2}_') # Beispiel: 99_01x02_700_
$RegEx2 = @('\d{1,2}x\d{1,2}') # Beispiel: 01x02
$a = [regex]::Matches($TXT, $RegEx1) | foreach {"$_`r`n"}
$b = [regex]::Matches($TXT, $RegEx2) | foreach {"$_`r`n"}
write-host $a
write-host $b
}
Die RegEx Suchmuster sind in Ordnung, jedoch leider kann ich z.B.
das Ergebnis von RegEx1 nicht mit RegEx2 verbinden.
Beispiel:
Aus '99_01x02_700_' soll dann: '01x0299_01x02_700_' werden.
Mit '+' ($c = $a + $b) und -join habe ich es versucht, was aber leider nicht funktioniert hat.
Hat jemand eine Idee?
Danke für eure Hilfe.
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2073125213
Url: https://administrator.de/contentid/2073125213
Ausgedruckt am: 19.11.2024 um 05:11 Uhr
7 Kommentare
Neuester Kommentar
Die RegEx Suchmuster sind in Ordnung,
Nöp sind sie nicht, der Regex hier$RegEx1 = @('\d{1,4}_\d{1,2}x\d{1,2}_')
passt bspw. nicht auf dein Beispiel # Beispiel: 99_01x02_700_
Da fehlt der hintere Teil für 700_ im Regex...Regex Matches sind Objekte und musst du auch die passende Property wählen (Regex auf dein Beispiel korrigiert ...
foreach ($datei in Get-ChildItem "C:\test" -File) {
$txt = @(Get-Content $Datei.Fullname -raw)
$a = [regex]::Match($txt,'(?i)\d{1,4}_\d{1,2}x\d{1,2}_\d{1,3}_').Value
$b = [regex]::Match($txt,'(?i)\d{1,2}x\d{1,2}').Value
$joined = $a+$b
$joined
}
Dann erklär uns doch mal was du überhaupt durch was ersetzen willst, so das es auch ein außenstehender nachvollziehen kann, und bitte diesmal doch bitte ohne Fehler und nicht passende Beispiele ... Am besten gleich mit Voher/Nachher Vergleichsbeispiel in Codetags, Danke!
In der Regel ist [regex]:Replace() dein bester Freund.
In der Regel ist [regex]:Replace() dein bester Freund.
foreach ($datei in ls 'D:\Ordner' -File){
[regex]::replace((gc $datei.Fullname -raw),'(?im)^.*?(\d{1,2}x\d{1,2}).*','$1$0') | set-content $datei.FullName
}