RegEx Filter mit zwei Bedingungen

R

ReIex

Gast
Hallo, ich bräuchte kurz hilfe beim erstellen einer RegEx (Regular Expression).

Ich will für ein Kommandozeilentool zur Dateiverwaltung ne Batch schreiben. Ich brauch nur noch die Regex für eine Filterfunktion, damit es funktioniert.

Folgendes soll passieren:

Der Ausdruck soll alle Dateien finden, die auf eine bestimmte Dateiendung enden. also z.B. nach der Zeichenfolge *.jpg suchen.
Dabei sollen gleichzeitig alle Dateien ignoriert werden, die im Dateinamen ein bestimmtes Wort enthalten wie z.B. "NICHT".
das alles muss nicht case sensitive sein.


Beispiel:
file001.jpg
fileNICHT01.jpg
file002.jpg
filenicht02.jpg


Rückgabe:
file001.jpg
file002.jpg


Eigentlich ziemlich simpel, aber ich hab leider absolut keinen Nerv für Regex. Für mich ist das völlig neu und ich hab jetzt über ne Stunde dran rumgefrickelt und mittlerweile nen ungesunden Puls :pcangry:, weil nix funktioniert und ich auf die schnelle den Aufbau nicht verstehe (verknüfung von zwei Ausdrücken)
Für jemanden, der damit öfter arbeitet sollte das wohl in <1 Minute erledigt sein.

Ach ja, alternativ wärs nett, den Ausdruck zusätzlich noch so umzuschreiben, dass ich mehr als nur ein wort bzw. mehr als nur eine Zeichenkette ausschließen kann. Also z.B. "alle .jpg Dateien jedoch ausgeschlossen Dateien mit "nicht" oder "not" im Dateinamen".
 
zum finden von file001.jpg , file002.jpg kannst du das hier benutzen:
ls | grep -o -E "file[0-9]{3}\.jpg"
zum ausschließen von wörtern, die invertierung (-v) + ggf. case insenstive option (-i) nutzen:
ls | grep -vi "nicht"
oder um mehrere wörter hinzuzufügen:
ls | grep -viE "nicht|not"
 
  • Gefällt mir
Reaktionen: BeBur
Dafür braucht man keine RegEx ...
Code:
dir | findstr /v "NICHT"
Case-insensitive geht über den Parameter /i

Man kann auch mehrere Wörter filtern ...
Code:
dir | findstr /v "NICHT" | findstr /v "NOT"
oder auch
Code:
dir | findstr /v "NICHT NOT"

Über den Parameter /g kann man auch eine Textdatei mit Wörtern angeben ...
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: sikarr
ReIex schrieb:
ich hab leider absolut keinen Nerv für Regex
Wenn du es brauchst wirst du dich damit wohl auseinander setzen müssen, gerade wenn du mehr willst als nur WertX matchen
ReIex schrieb:
auf die schnelle den Aufbau nicht verstehe (verknüfung von zwei Ausdrücken)
Ein Oder bei RegEx wäre |
ReIex schrieb:
Ach ja, alternativ wärs nett, den Ausdruck zusätzlich noch so umzuschreiben, dass ich mehr als nur ein Wort bzw. mehr als nur eine Zeichenkette ausschließen kann. Also z.B. "alle .jpg Dateien jedoch ausgeschlossen Dateien mit "nicht" oder "not" im Dateinamen".
Kann man evtl. über eine Suche besser filtern als NUR RegEX @originalfelix hat ja schon ein Bsp. gepostet, wenn auch für die Linux Bash, Powershell ist auch sehr Komfortabel was Filter angeht, aber du hast uns ja deine verwendete Umgebung vorenthalten.
 
@sikarr Stimmt. habe übersehen, dass es um eine Batch ging. Aber Regex sollte doch eigentlich kompatibel sein ?
 
Ergänzung:
Es geht um ein einfaches Windows Batchfile, welches ein Kommandozeilentool zur Dateiverwaltung aufruft.

Ich brauche wie gesagt NUR den Regex für den Filterparameter, der an das tool beim aufruf über die Batch weiter gegeben wird.
Ist ne private, einmalige Sache. Wenn ich das beruflich bräuchte würde ich es auch verinnerlichen. Aber das ist nunmal nicht der Fall. Soll ich jetzt wegen einem Ausdruck die ganze Regex Syntax lernen?
Ich habe nicht umsonst um Hilfe gebeten... :(

Das bisher gepostete hilft mir leider nicht weiter. Sorry.
 
wann man keine komplexen Regex Ausdruecke kann oder lernen will (nicht dass es hier ueberhaupt annaehernd komplex waere ...), dann kann man immer noch am Ende mehrere Filter nacheinander ausfuehren ...
Das sollte sogar der TE schaffen.
Und wie schon gesagt, hier braucht man ja noch nicht mal ein Regex

Edit: wenn du solche Dinge hier nicht gleich erwaehnst, ist es fuer Informatiker nun mal naheliegend, einfachere Loesungen zuerst zu nennen...
ReIex schrieb:
Es geht um ein einfaches Windows Batchfile, welches ein Kommandozeilentool zur Dateiverwaltung aufruft.
 
ReIex schrieb:
Das bisher gepostete hilft mir leider nicht weiter. Sorry.
Inwieweit hilft dir *.jpg | findstr /v "nicht not" nicht? Macht doch genau das, was Du im Eingangspost gewünscht hast?

Ansonsten stellt sich die Frage, wie das nicht benannte Tool mit RegEx umgeht ...
 
Zuletzt bearbeitet:
@Andreas_
"dir" also directory hat doch nix mit regex zu tun?

wie gesagt gehts mir nicht um irgendwelche Batchbefehle (das war nur zu erklärung, wofür ich es brauche) ich will auch nicht mit ner Windows Batch Dateien filtern. Ich starte in der Batch einfach nur ein Kommandozeilentool und dieses tool erwartet bei einem der Startparameter einen regex. Diesen verarbeitet das tool dann selbst, um Dateien zu filtern. Sowas wie nen ordner übergeben brauch ich auch nicht. Das ist bereits mit nem anderen parameter geschehen.

Wenn der Regex hier https://regexr.com/
auf meine Beispiele funktionieren würde, wäre ich schon glücklich.

Also Meine beispiele auf die Seite kopieren, regex oben in die zeile eingeben und das so, dass das rauskommt, was ich im ersten Post unter "Rückgabe" hingeschrieben habe. Das wär alles...
 
Zuletzt bearbeitet von einem Moderator:
@new Account()

Wenn ich das bei https://regexr.com/
eingebe und meine beispiele reinkopiere findet er keine Matches.

Zudem ist
file[0-9]{3}\.jpg
nicht das was ich brauche.

Ich suche in meinem Beispiel oben nach allen Dateien mit .jpg im Dateinamen, aber ausgeschlossen jene dateien, die neben .jpg zusätzlich "nicht" im Dateinamen haben.

Bei dem von dir zitierten wird jedoch nach Dateien gesucht, die "file" enthalten, dann 3 Ziffern von 0-9 enthalten und dann mit .jpg enden. Das brauch ich aber nicht.


Alles was ich bisher hinbekommen habe ist sowas wie:

.jpg | nicht

der befehl funktioniert auch auf https://regexr.com/

Aber da erkennt er alle Dateien, die .jpg im Namen haben und alle die "nicht" im namen haben.
Jetzt müsste ich eigentlich nur aus dem | (OR) ein &(AND) machen und die rechte Seite negieren.

In etwa so:

(.jpg) & !(nicht)

aber das ist mit Regex so nicht möglich. Es gibt schlichtweg keinen AND Operator. Also muss mans in Regex wohl komplett anders lösen?

Das kann doch nicht so schwer sein :freak:
Ich versteh allgemein auch nicht wo jetzt das Problem für euch ist. Wenn ich nach regex examples google dann funktioniert so gut wie alles was ich finde auch auf der verlinkten Seite bei regexr.com. Aber hier bekomme ich von euch nur codeschnipsel, die mir syntax fehler anzeigen, weil sie für irgendwelche linux terminals oder was auch immer sind.

Sorry wenn ich mich unverständlich ausdrücke, aber einfacher beschreiben, als dass ich NUR den Regex Ausdruck brauche kann ich es nunmal nicht. Vielleicht hab auch ich einfach nicht verstanden, was Regex ist und wir reden deshalb nur aneinender vorbei, dann tuts mir leid...
 
Zuletzt bearbeitet von einem Moderator:
ReIex schrieb:

Funktioniert doch:
811207
 
@new Account()
Okay sorry mein Fehler. Da hat sich beim Kopieren mal wieder das leerzeichen am Zeilenende mit eingeschlichen.
Es funktioniert, aber war wie gesagt nicht das was ich wollte.


@r15ch13
Jap, das isses. Funktioniert. Danke dir!! :bussi:
 
Zurück
Oben