Laden...

Regular Expression, gleich und ungelich bestimmter Wortteile

Erstellt von lukasS vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.338 Views
lukasS Themenstarter:in
65 Beiträge seit 2009
vor 8 Jahren
Regular Expression, gleich und ungelich bestimmter Wortteile

Hallo,

ich stelle mich irgendwie total blöd an, was die Regular Expression angeht. Ich habe z. B. eine Liste mit Ländern die ich folgendermaßen (siehe unten) durch den Benutzer filtern lassen möchte. Dabei können auch zusammen gesetzte Filter gesetzt werden (Filter ist dick markiert, das Ergebnis, was ich auf erwarte, ist da drunter):

Liste:
Portugal
Polen
Australien
Argentinien
Brasilien
Panama

Filter:
(Brasilien)|(Panama)
Brasilien
Panama

(p.*)
Portugal
Polen
Panama

(*.ien)
Australien
Argentinien
Brasilien

**(po.)|(.in)
Argentinien
Portugal
Polen

Bis hierhin klappt das, so weit ich das getestet habe. Aber ist das trotzdem richtig?

Wie ist es denn bei Ungleich? Ich kriege das nicht wirklcih hin. Ich habe es mit ?! versucht, aber vergeblich. Das Ergebnis soll wie die Liste da unten aussehen.

(.ien)|(Po.)|(?!Polen)
Portugal
Australien
Argentinien
Brasilien

das klappt auch nicht
(?!Polen)
Portugal
Australien
Argentinien
Brasilien
Panama

Über ein paar Tipps wäre ich dankbar!

Gruß

Lukas

T
314 Beiträge seit 2013
vor 8 Jahren

Ein NOT wird mit einem ^ ausgedrückt.

lukasS Themenstarter:in
65 Beiträge seit 2009
vor 8 Jahren

^ zeigt doch den Anfang des Wertes an.

Ich habe noch ein Beispiel gefunden: ^(Polen.+|(?!Polen).)$
Damit klappt das, allerdings kann ich damit nicht .
machen und so richtig verstehen tute ich das auch nicht.

6.911 Beiträge seit 2009
vor 8 Jahren

Hallo lukasS,

^ zeigt doch den Anfang des Wertes an.

Es kommt auf den Kontext an. Wird es in [^] verwendet, so entspricht es dem erwähnten NOT (im Sinnen von alle Zeichen außer).

Für Regex ist das On-the-fly Regex-Tester: Regex-Lab sehr hilfreich und dessen F1-Hilfe gibt einen groben Überblick über die Zeichen. Schau dir das einmal an und bau damit dein Pattern zusammen.

Mit dem negativen Lookahead warst du gar nicht so weit weg. (?!Polen)((.*ien)|(Po.*)) ist passend.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

49.485 Beiträge seit 2005
vor 8 Jahren

Hallo lukasS,

Aber ist das trotzdem richtig?

tja, wenn alle deine Pattern pattern automatisch mit ^(pattern)$ umschlossen werden, dann kommt es hin. Sonst nicht. Außerdem sind alle in deinen Pattern enthaltenen Klammern unnötig. Ich würde folgende Pattern verwenden (mit RegexOptions.IgnoreCase):

^(brasilien|panama)$
^p
ien$
^p|ien$

Wenn du Polen (oder etwas anderes) ausschließen willst, schreibst du vor den (sicherheitshalber eingeklammerten) positiven Pattern, egal wie dieser aussieht:

(?!^polen$)

Also insbesondere darf das Ausschlusskriterium nicht als Alternative angehängt und auch nicht vorangestellt werden, sondern nur so wie es ist direkt vorangestellt werden, z.B.

(?!^polen$)(^p|ien$)

Findet alle Länder, die mit p anfangen oder ien enden, außer Polen.

herbivore

lukasS Themenstarter:in
65 Beiträge seit 2009
vor 8 Jahren

Vielen Dank, ihr habt mir sehr geholfen!

Gruß und eine schöne Woche!

Lukas