Laden...

Mehrere "Präfixe" mit RegEx filtern

Erstellt von zero_x vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.369 Views
zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 15 Jahren
Mehrere "Präfixe" mit RegEx filtern

Hallo Leute,

ich habe einen Text, der in Katigorieren aufgeteilt ist. Diese Katigorien kann man sich als als einen "Präfix" vorstellen. Nach einen "Präfix" folgt ein weiterer "Präfix", der wiederrum auskunft über etwas gibt. Der erste Präfix lautet X. Nach dem "X" folgt ein Leerzeichen mit einem beliebigen Text, den ich mithilfe von RegEx ermitteln möchte. Das habe ich ganz einfach umgesetzt:

Regex regex = new Regex("(?<=X\\s)[a-zA-Z]+");
MatchCollection m = regex.Matches("X EinText\nX NocheinText");

foreach (Match _m in m)
{
    // Ausgabe der gefundenen Texte
}

Nun kommt ein zweiter "Präfix" ins Spiel: z.B. Y. "Y" darf jedoch nicht allein stehen, sondern muss vor dem "X" stehen. Wie ist es nun möglich mit RegEx zu filtern ob ein "Y" vor dem "X" steht oder nicht?

zero_x

B
196 Beiträge seit 2007
vor 15 Jahren

Stichwort:
Lookarounds (Lookbehind / Lookahead)

your fragile folded wings
are just tired from the pure blue sky
you dont have to force your smiles for anyone
its okay to smile...for yourself

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Bakachan,

einen Lookbehind nutzt zero_x doch schon.

Hallo zero_x,

wobei ich denke, dass man hier auch gut ohne Lookbehinds auskommt, sondern einfach den Text mit Präfix als ganzes matcht und dann per Groups auf den gewünschten Teil zugreifen kann, den man dazu nur einklammern muss.

X\s([a-zA-Z]+)

Die Frage ist jetzt, was heißt "nach einen 'Präfix' folgt ein weiterer 'Präfix'", meinst du einfach

Y\sX\s([a-zA-Z]+)

?

herbivore

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 15 Jahren

Hallo herbivore,

das Problem ist, dass wenn ein "Präfix" vor einem anderen "Präfix" steht es eine andere Bedeutung hat. Wenn ich jetzt mit:

Y\sX\s([a-zA-Z]+)

den Text durchsuche, erhalte ich auch von ersten RegEx einen Fund. Genau das ist auch mein Problem. Ich möchte, wenn ein "Präfix" vor einem anderen "Präfix" steht (Y vor X) es nicht mit dem ersten RegEx finden, sondern nur(wenn Y davor steht) es auch vom zweiten RegEx finden. Sozusagen eine Bedingung.

zero_x

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo zero_x,

ich verstehe es immer noch nicht so genau, aber so wie ich es verstehe, ein Fall für einen negativen Lookbehind.

(?<!Y\s)X\s([a-zA-Z]+)

herbivore

946 Beiträge seit 2008
vor 15 Jahren

Du kannst die LockBehinds auch einfach verschachteln:

(?<=(?<![Y\s])X\s)[a-zA-Z]+

Sehr performant dürfte dieser RegEx aber nicht sein.

Komisch, der Post von herbivore muss gekommen sein, als ich auf Antworten geklickt habe. Jedenfalls habe ich ihn nicht bemerkt.

mfg
SeeQuark

zero_x Themenstarter:in
1.044 Beiträge seit 2008
vor 15 Jahren

Hallo herbivore, hallo SeeQuark,

vielen Dank euch Beiden!

zero_x