(edit: Nuss geknackt bei 1a, 1 b - offen sind noch 2 und 3)
( ... 1c und 1d probiere ich nach 1a und 1b)
Guten Morgen,
ich habe mich in den letzten Tagen viel mit der regulären Suche beschäftigt und bin überrascht, wie wirkungsvoll und effektiv dieses Instrument in Total Commander zu nutzen ist.
Folgende Aufgabenstellungen konnte ich leider nicht lösen:
Sozusagen eine Handvoll zu knackende Nüsse zu Weihnachten
Ich bin auf der Suche nach einer Lösung für die „reguläre Suche“:
(1 a)
Beispiel:
Tag - 20141129.txt
Ziel:
Tag - 2014-11-29.txt
Ich habe versucht, das mit folgender Regulierersuche zu lösen:
([0-9]{4,4)([0-9]{2,2)([0-9]{2,2)
$1-$2-$3
Meine Überlegung dabei – finde eine genau 8-stellige Nummer, finde darin ab dem Beginn der Nummer eine 4-stellige Nummer, anschließend eine 2-stellige Nummer und danach noch mal eine 2-stellige Nummer und trenne die Ziffernfolgen mit einem Bindestrich.
Soweit zur Theorie – wie kann man das als reguläre Suche schreiben?
Am Anfang der Nummer steht eines dieser Zeichen
Bindestrich oder Leerzeichen oder Unterstrich
Am Ende der Nummer steht der Punkt (/.).
(1 b)
In Analogie suche ich eine Lösung für folgendes Beispiel:
Beispiel:
Tag - 042015.txt
Ziel:
Tag - 2015-04.txt
$2-$1
Finde eine genau 6-stellige Nummer, nimm ab dem Anfang eine 2-stellige Nummer, dann eine 4-stellige Nummer.
Am Anfang der Nummer steht eines dieser Zeichen
Bindestrich oder Leerzeichen oder Unterstrich
Am Ende der Nummer steht der Punkt (/.).
Wie kann man das als reguläre Suche schreiben?
(1 c)
In Analogie suche ich eine Lösung für folgendes Beispiel:
Beispiel:
Tag - 0415.txt
Ziel:
Tag - 2015-04.txt
20$2-$1
Finde eine genau 4-stellige Nummer, nimm ab dem Anfang eine 2-stellige Nummer, dann eine 2-stellige Nummer.
Am Anfang der Nummer steht eines dieser Zeichen
Bindestrich oder Leerzeichen oder Unterstrich
Am Ende der Nummer steht der Punkt (/.).
Wie kann man das als reguläre Suche schreiben?
(1 d)
In Analogie suche ich eine Lösung für folgendes Beispiel:
Beispiel:
Tag - 04 15.txt
Ziel:
Tag - 2015-04.txt
20$2-$1
Finde eine genau 5-stellige Zeichenkette (2 Ziffer, ein Leerzeichen, 2 Ziffern), nimm ab dem Anfang eine 2-stellige Nummer, ignoriere das Leerzeichen, dann eine 2-stellige Nummer.
Am Anfang der Nummer steht eines dieser Zeichen
Bindestrich oder Leerzeichen oder Unterstrich
Am Ende der Nummer steht der Punkt (/.).
Wie kann man das als reguläre Suche schreiben?
(2)
Bei dieser Lösung gibt es noch ein Schönheitsfehler.
Beispiel:
20151209-Handelsblatt.pdf
20151209-Handelsblatt Teil 33 von 2015.pdf
Ziel:
Ich möchte, dass der Dateiname so verändert wird:
Handelsblatt - 20151209.pdf
Handelsblatt Teil 33 von 2015 - 20151209.pdf
Mit folgendem Suchmuster bin ich schon ein Stückchen vorangekommen, es funktioniert merkwürdigerweise nur,wenn der Bindestrich im ersten Suchausdruck enthalten ist. Dadurch ist natürlich ein Bindestrich am Ende zu viel im Dateinamen.
Wie kann man dieses Suchmuster eleganter und vor allem funktionstüchtig schreiben?
suchen nach:
([0-9]{8}-)(\w*)
ersetzen durch:
$2 - $1
Ergebnis:
Handelsblatt - 20151209-.pdf
(3)
Ich möchte Monat und Jahr miteinander tauschen, wenn dazwischen entweder einen Bindestrich oder ein Leerzeichen sind. Als Einzelsuche geht das so:
Beispiel:
12-2015
12 2015
12.2015
12_2015
Ziel:
2015-12
suche nach dem Muster "12-2015"
([0-9]{2})-([0-9]{4})
ersetze das Muster durch "2015-12"
$2-$1
und
suche nach dem Muster "12 2015"
([0-9]{2}) ([0-9]{4})
ersetze das Muster durch "2015 12"
$2-$1
Wie kann ich beide Suchanfragen in einer Suchanfrage kombinieren?
Suche nach Bindestrich oder Leerzeichen in einem Such-Durchlauf?
Vielen Dank!
tc_fun
MUT: Reguläre Suche – Fallbeispiele - Hilfe erbeten
Moderators: white, Hacker, Stefan2
MUT: Reguläre Suche – Fallbeispiele - Hilfe erbeten
Last edited by tc_fun on 2015-12-11, 15:35 UTC, edited 1 time in total.
MUT: RegEx Beispiele
Ich fang' mal schnell mit der 1 an:
1a)
FROM:
Tag - 20141129.txt
TO:
Tag - 2014-11-29.txt
Suche: ([-_ ])(\d{4})(\d{2})(\d{2})\.
Ersetze: $1$2-$3-$4.
[x]RegEx
Erklärung:
Soll nur auf einen Teil irgendwo im Dateinamen passen.
Suche ein Zeichen aus der Gruppe "Bindestrich/Unterstrich/Leerzeichen",
gefolgt von vier Ziffern, zwei Ziffern, zwei Ziffern, ein Punkt.
1b)
FROM:
Tag - 042015.txt
TO:
Tag - 2015-04.txt
Suche: ([-_ ])(\d\d)(\d{4})\.
Ersetze: $1$3-$2.
[x]RegEx
Edit, weiter geht's:
2.)
FROM:
20151209-Handelsblatt.pdf
20151209-Handelsblatt Teil 33 von 2015.pdf
TO:
Handelsblatt - 20151209.pdf
Handelsblatt Teil 33 von 2015 - 20151209.pdf
Suche: ^(.+)-(.+)$
Ersetze: $2 - $1
[_]E(rweiterung)
[x]RegEx
Erklärung:
Soll auf den gesamten Dateinamen passen: ^.....$.
Suche am Anfang ein-oder-mehr Stücke eines beliebigen Zeichenen, bis zu einem Bindestrich,
dann gefolgt von ein-oder-mehr Stücke eines beliebigen Zeichenen bis zum Ende (ohne die Erweiterung zu berücksichtigen, daher "[_]E")
3.)
FROM:
12-2015
12 2015
12.2015
12_2015
TO:
2015-12
Suche: (\d\d)[-_ .](\d{4})
Ersetze: $2-$1
[x]RegEx
Erklärung:
Soll nur auf einen Teil irgendwo im Dateinamen passen.
Suche zwei Ziffern, ein Zeichen aus der Gruppe "Bindestrich/Unterstrich/Leerzeichen/Punkt", vier Ziffern, irgendwo im Dateinamen.
HTH?
1a)
FROM:
Tag - 20141129.txt
TO:
Tag - 2014-11-29.txt
Suche: ([-_ ])(\d{4})(\d{2})(\d{2})\.
Ersetze: $1$2-$3-$4.
[x]RegEx
Erklärung:
Soll nur auf einen Teil irgendwo im Dateinamen passen.
Suche ein Zeichen aus der Gruppe "Bindestrich/Unterstrich/Leerzeichen",
gefolgt von vier Ziffern, zwei Ziffern, zwei Ziffern, ein Punkt.
1b)
FROM:
Tag - 042015.txt
TO:
Tag - 2015-04.txt
Suche: ([-_ ])(\d\d)(\d{4})\.
Ersetze: $1$3-$2.
[x]RegEx
Edit, weiter geht's:
2.)
FROM:
20151209-Handelsblatt.pdf
20151209-Handelsblatt Teil 33 von 2015.pdf
TO:
Handelsblatt - 20151209.pdf
Handelsblatt Teil 33 von 2015 - 20151209.pdf
Suche: ^(.+)-(.+)$
Ersetze: $2 - $1
[_]E(rweiterung)
[x]RegEx
Erklärung:
Soll auf den gesamten Dateinamen passen: ^.....$.
Suche am Anfang ein-oder-mehr Stücke eines beliebigen Zeichenen, bis zu einem Bindestrich,
dann gefolgt von ein-oder-mehr Stücke eines beliebigen Zeichenen bis zum Ende (ohne die Erweiterung zu berücksichtigen, daher "[_]E")
3.)
FROM:
12-2015
12 2015
12.2015
12_2015
TO:
2015-12
Suche: (\d\d)[-_ .](\d{4})
Ersetze: $2-$1
[x]RegEx
Erklärung:
Soll nur auf einen Teil irgendwo im Dateinamen passen.
Suche zwei Ziffern, ein Zeichen aus der Gruppe "Bindestrich/Unterstrich/Leerzeichen/Punkt", vier Ziffern, irgendwo im Dateinamen.
HTH?
Last edited by Stefan2 on 2015-12-11, 19:07 UTC, edited 3 times in total.
Re: Reguläre Suche – Fallbeispiele - Hilfe erbeten
tc_fun - Posted: Fri Dec 11, 2015 15:58
Wo kommst du denn her? (Oder bist du Student?)tc_fun wrote:Guten Morgen,
Zu (2)
Du musst lediglich den Bindestrich aus der Gruppenklammer herausnehmen
und mit dem Punkt-Platzhalter arbeiten:
zu (3)
Du musst lediglich den Bindestrich aus der Gruppenklammer herausnehmen
und mit dem Punkt-Platzhalter arbeiten:
Code: Select all
([0-9]{8})-(.+)
Code: Select all
(\d{2})[.\-_\s](\d{4})
$2-$1
TC plugins: PCREsearch and RegXtract
Re: Reguläre Suche – Fallbeispiele - Hilfe erbeten
Guten Morgen ist zu jeder Tageszeit eine freundliche Anrede, ähnlich wie moin ...Stefan2 wrote:tc_fun - Posted: Fri Dec 11, 2015 15:58Wo kommst du denn her? (Oder bist du Student?)tc_fun wrote:Guten Morgen,
und vielen Dank für Eure Tipps - eine super Hilfe!