Laden...

RegExp für °>text.b.2_abc.gif<°

Erstellt von gelöschtem Konto vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.513 Views
Gelöschter Account
vor 14 Jahren
RegExp für °>text.b.2_abc.gif<°

ich habe einen text :
blahblah°>text.b.2_abc.gif<° blah blah °>text.b.2_abc.gif<°blah blah °>text.b.2_abc.gif<°blah2345

ich muss öfter hintereinander den text (der sich immer ändert ausser die zwei zeichen am anfang und die am ende) °>text.b.2_abc.gif<° in nur den dateinamen umwandeln
text.b.2_abc.gif also.
ich programmiere in c-sharp
aber ich kenne mich leider nicht mit regexp aus und wollte mal fragen ob mir jemand damit helfen kann weil regexp sind ja schon kompliziert wie ich das gesehn hab als ich es selbst versucht habe.

sollte jemand eine andere lösung ohne regex parat haben kann er sie gerne posten =)

R
234 Beiträge seit 2007
vor 14 Jahren

So, mal eben Regex-Lab angeschmissen. 😉

Wenn < und > wirklich nur als Begrenzung für die Dateinamen eingesetzt werden sollte es folgender Ausdruck tun:


>([^<]+)

/Edit: Ich schreibe zu schnell.
/Edit2: Viel zu schnell ...

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo DNAofDeath,

weil regexp sind ja schon kompliziert

wie kommst du denn jetzt auf den Dreh? Es gibt kaum was einfaches als Regex. Wie auch der Pattern von rastalt zeigt.

herbivore

Gelöschter Account
vor 14 Jahren

naja vorrausgesetzt man versteht die syntax und weiß die ganzen funktionen und so...

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo DNAofDeath,

naja vorrausgesetzt man versteht die syntax und weiß die ganzen funktionen und so...

das ist ja nunmal bei jeder (Programmier-)Sprache nötig und kein Indiz dafür, dass es schwer ist, Regex zu lernen. Regex ist aufgrund des geringen Sprachumfangs und des klar umrissenen Einsatzgebiets eben deutlich leichter zu lernen, als eine normale Programmiersprache wie C#.

herbivore

Gelöschter Account
vor 14 Jahren

und das was ich suche fängt immer mit °> an und hört mit .gif<° auf

aber es gibt noch andere sachen die mit °> anfangen und mit <° aufhören
das ist mein problem

und ich finde etwas wo 1000 klammern drin sind is anfangs erstmal schwerer zu verstehn, als klare befehle die man intuitiv deuten kann

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo DNAofDeath,

aber es gibt noch andere sachen die mit °> anfangen und mit <° aufhören

das ist aber kein Problem von Regex, sondern auch bei jeder anderen Lösungsmöglichkeit, müsstest du Kriterien haben, anhand derer du entscheiden kannst, ob du das Gesuchte gefunden hast oder nicht.

Diese Kriterien musst du kennen oder finden (und dann berücksichtigen).

herbivore

PS: Ok, habe jetzt erst gesehen, dass das ".gif" das Kriterium sein soll.

R
234 Beiträge seit 2007
vor 14 Jahren

und das was ich suche fängt immer mit °> an und hört mit .gif<° auf

aber es gibt noch andere sachen die mit °> anfangen und mit <° aufhören


>([^>]+.gif)<

Was das Erlernen von Regulären Ausdrücken angeht, kann ich mich herbivore nur anschließen. Hier im Forum gibt es auch einen Artikel darüber, den ich dir sehr empfehlen kann. In Kombination mit von mir genannten Tool solltest du dann in der Lage sein Ausdrücke selbst zu erstellen.

946 Beiträge seit 2008
vor 14 Jahren

@rastalt: Dein pattern berücksichtigt das Zeichen "°" noch nicht (macht aber nix) und hat noch den Schönheitsfehler, dass ausser ".gif" auch noch "xgif" möglich ist, da dein Punkt noch nicht escaped ist.

[PRE](?<=°>)[^<]+?\.gif(?=<°)[/PRE]

Es liefert zusätzlich nur den Filenamen und nicht noch die Abgrenzungen mit.

mfg
SeeQuark

Gelöschter Account
vor 14 Jahren

super danke leute =) für eure hilfe

und herbivore? keine angst =) ich werds noch lernen
aber ich bin im moment mitten in einem projekt und habe erstmal nur eine lösung für dieses eine problem gesucht, da ich regex sonst immer aus dem weg gehe oder sie einfach nicht brauche weils einfach ist
aber wie gesagt, ich werd mich hier mal umschauen
und das regex-tool da hab ich mir auch schon geladen ''=)

wie gesagt, danke für eure hilfe und die nützlichen antworten.

R
234 Beiträge seit 2007
vor 14 Jahren

@rastalt: Dein pattern berücksichtigt das Zeichen "°" noch nicht (macht aber nix) und hat noch den Schönheitsfehler, dass ausser ".gif" auch noch "xgif" möglich ist, da dein Punkt noch nicht escaped ist.

Ersteres war beabsichtigt, da ich, wie eingangs erwähnt, davon ausgegangen bin, dass < und > nur als Begrenzung für die gewollten Stellen benutz wird. Zweiteres war keine Absicht, vielen Dank für den Hinweis. 🙂
Insgesamt erscheint mir dein Pattern dann doch besser geeignet.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo SeeQuark,

in gewissen Sinne besser sind die Look-Aheads und -Behinds schon. Aber letztlich würde ich doch der Einfachheit halber folgendes vorziehen:

°>([^<]+.gif)<°

Den gewünschten Teil erhält man dann mit Match.Groups [1].

Ob man das Fragezeichen (non greedy) schreibt oder nicht, kommt hierbei auf das gleiche. Es ist so gesehen also überflüssig und entsprechend habe ich es weggelassen.

herbivore

467 Beiträge seit 2007
vor 14 Jahren

Gerade wenn man etwas wie [^>] schreibt ist das doch schon nongreedy und somit macht das ? nur noch performance kaputt. Bei Vielen Dateinamen könnte das vielleicht sogar ein Bisschen was ausmachen. Wenn man es schreiben will, macht man doch eher .+?, oder irre ich?

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo ANSI_code,

es kann schon Fälle geben in denn x+ und x+? einen Unterschied macht, auch wenn man für x etwas anders einsetzt als einen Punkt, z.B. bei dem Text

>bla.gifundirgendwasanderes.gif<

und dem Pattern

[<]*.gif bzw. [<]*?.gif

herbivore

467 Beiträge seit 2007
vor 14 Jahren

ich meinte den Punkt im Regex-Sinn, also belieiges Zeichen. Das ist doch genau das greedy- nicht greedy verhalten. Ich ziehe die [^xxx]- Version vor, da (ich glaub das steht sogar im Regextutorial) es, wie gesagt wahrscheinich performanter ist.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo ANSI_code,

greedy oder nicht greedy hängt nicht an Prunkt oder nicht Punkt. Mein Beispiel zeigt doch gerade, dass greedy oder nicht greedy einen Unterschied machen kann, selbst wenn man keinen Punkt verwendet.

Das Fragezeichen wirkt sich ja auf Wiederholungszeichen (also Plus oder Stern) aus und nicht auf das Zeichen, das wiederholt wird.

Wenn man die Möglichkeit hat, [^xxx] statt .+? zu verwenden, dann sollte man das in der Tat vorziehen. Aber nicht unbedingt wegen der Performance, sondern vor allem, weil .*? mitunter gieriger ist als man vermutet und geplant hat.

herbivore