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 =)
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
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
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
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.
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.
@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
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.
@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.
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
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?
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
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.
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