Dateisuche mit RegEx: 5 Ziffern ab 18001, keine 000 am Ende

German support forum

Moderators: white, Hacker, Stefan2

Post Reply
User avatar
Lucky Joe
Member
Member
Posts: 161
Joined: 2012-07-25, 10:30 UTC

Dateisuche mit RegEx: 5 Ziffern ab 18001, keine 000 am Ende

Post by *Lucky Joe »

Hallo zusammen,

wie muss ich einen RegEx-Ausdruck formulieren, wenn ich folgendes suchen will:
  • alle Dateien, deren Name genau 5 Zeichen hat,
  • die Zeichen ausschließlich aus Ziffern bestehen,
  • die 5 Ziffern aber immer größer als 18001 sind,
  • deren letzten 3 Stellen nie 000 lauten dürfen.
Danke im Voraus und VG
Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
User avatar
Dalai
Power Member
Power Member
Posts: 9364
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Re: RegEx

Post by *Dalai »

Das Kriterium "Größer als 18001" kann man meines Wissens mit RegEx nicht abdecken, weil dafür eine Interpretation der Daten vorgenommen werden müsste. Die restlichen Dinge sind recht einfach:

Code: Select all

^[1-9][0-9][1-9]{3}\..{3}$
Sucht nach genau fünf Ziffern (vor der Extension), wobei die erste und die letzten drei Stellen keine Null sein dürfen.

Grüße
Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
User avatar
Lucky Joe
Member
Member
Posts: 161
Joined: 2012-07-25, 10:30 UTC

Re: RegEx

Post by *Lucky Joe »

Hallo Dalai,

danke schon mal dafür - das mit dem "größer als" hatte ich mir schon fast gedacht.
Bei dem letzten Punkt habe ich mich ungenau ausgedrückt: es sollen nie 3 Nullen zusammen vorkommen; das ist zulässig:

18001
18002
19101
19320

Hintergrund: Die ersten beiden Ziffern stellen das Jahr dar (ab [20]18 ...), die nächsten drei Zahlen sind fortlaufende Nummern, die aber immer dreistellig sind, aber eben nicht "000". Jedes Jahr beginnt also immer mit "JJ001". Ich befürchte fast, dass das auch eine "Interpretation" wäre und somit nicht lösbar ist.

VG - Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
User avatar
Dalai
Power Member
Power Member
Posts: 9364
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Re: RegEx

Post by *Dalai »

Nun, die simple Variante ist, mit mehreren Suchdurchläufen zu arbeiten und in jedem die Stelle zu ändern, die nicht Null sein darf. Also z.B.

Code: Select all

^[1-9][0-9][0-9]{2}[1-9]\..{3}$
^[1-9][0-9][0-9][1-9][0-9]\..{3}$
^[1-9][0-9][1-9](([0-9]{2})|([0-9][1-9]))\..{3}$
Der erste Ausdruck sollte Namen finden, deren letzte Stelle größer ist als Null (z.B. 001). Der zweite Ausdruck findet Namen mit Ziffern größer Null an der vorletzten Stelle (z.B. 010), und der letzte Ausdruck sollte Namen finden, die entweder an nur der drittletzten Stelle größer Null sind oder an der drittletzten und der letzten (z.B. 100 oder 101).

Vielleicht mal bei www.regexr.com ausprobieren mit den obigen Ausdrücken und Beispieldateinamen. Grade bei dem letzten Ausdruck bin ich mir nicht sicher, ob er das tut, was ich denke.

Grüße
Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
User avatar
Lucky Joe
Member
Member
Posts: 161
Joined: 2012-07-25, 10:30 UTC

Re: RegEx

Post by *Lucky Joe »

Hallo Dalai,

ich glaube, mit einem einzelnen Ausdruck komme ich bessser zurecht, auch wenn danach etwas Handarbeit dazukommt - dann bleibt alles übersichtlich und das Manuelle hält sich in Grenzen.

Ich arbeite übrigens zum Testen mit dem RegEx-Coach.

Danke nochmals - Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
User avatar
Brumm
Junior Member
Junior Member
Posts: 98
Joined: 2014-11-18, 11:00 UTC

Re: RegEx

Post by *Brumm »

Bei Regex bräuchtest du dafür negative lookaheads (oder -behinds)... es geht, aber übersichtlich ist das nicht. ;)
Dateimanagerfetischist.
User avatar
milo1012
Power Member
Power Member
Posts: 1158
Joined: 2012-02-02, 19:23 UTC

Re: RegEx

Post by *milo1012 »

Dalai wrote: 2018-09-05, 14:43 UTCDas Kriterium "Größer als 18001" kann man meines Wissens mit RegEx nicht abdecken, weil dafür eine Interpretation der Daten vorgenommen werden müsste.
Lucky Joe wrote: 2018-09-05, 16:08 UTCIch befürchte fast, dass das auch eine "Interpretation" wäre und somit nicht lösbar ist.
Nein, nicht zwangsläufig. RegEx ist von der Sprachentheorie so ausgelegt, dass es solche Fälle noch abdecken kann, solange man die Bedingungen dafür in mehreren alternativen zulässigen "Konstrukten" ausdrücken kann. Oder in anderen Worten: es wird dann beliebig kompliziert und umfangreich, weil man mit extrem vielen Alternativen arbeiten muss (das Pipe-Zeichen, Gruppen), aber es ist möglich.

Hier mal ein universeller Einzeiler-RegEx, der fast alles abdecken sollte (sicherlich noch verbesserungswürdig):

Code: Select all

^(1(8|9)|[2-9]\d)(\d\d[1-9]|\d[1-9]\d|[1-9](\d\d|\d[1-9]))(\.[^\.]+)?$
TC plugins: PCREsearch and RegXtract
User avatar
Lucky Joe
Member
Member
Posts: 161
Joined: 2012-07-25, 10:30 UTC

Re: Dateisuche mit RegEx: 5 Ziffern ab 18001, keine 000 am Ende

Post by *Lucky Joe »

Hi milo1012,

jo, der klappt - ist sogar noch halbwegs "durchschaubar" - Danke dir!

VG - Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
Post Reply