Mustersuche in Quelltexten
-
Hallo,
ich beschäftige mich aktuell mit der Mustersuche von Bildern in Quelltexten. Bin allerdings gerade etwas verwirrt ob ich das Pattern so richtig verstanden habe. Vielleicht könnt ihr mir ja Tipps geben?Mein Vorschlag:
[a-z._A-z-]+.jpg | [a-z._A-z-]+.gif | [a-z._A-z-]+.jpg | [a-z._A-z-]+.pngetc. etc.
Freue mich auf jede hilfreiche Antwort.
jaredgerald
-
Warum nicht einfach nach der Erweiterung suchen, wozu das a-z? Was ist wenn da Zahlen im Namen sind?
-
das habe ich bei einem alten programm schon gemacht, aber mir gehts auch um den lerninhalt. ja richtig, zahlen habe ich dabei noch vergessen...
ich weiß nur nicht wie ich oder-verknüpfungen bei den mustersuchen mache
-
Das wichtigste ist, dass du exakt nach dem suchst, was du finden willst. Auf gar keinen Fall stillschweigende Zusatzannahmen machen! Das gilt für jede Art von Mustersuche. Und du demonstrierst hier sehr schön, wie man es nicht machen darf.
Das auszeichnende Merkmal von Dateien, die eine bestimmte Endung im Namen haben, ist nämlich, dass ihr Name auf etwas bestimmten endet. Klingt trivial, aber für dich ist es das offensichtlich nicht. Erst das mit den Buchstaben. Dann sagst du, Zahlen fehlen. Aber was ist mit anderen Zeichen? Dateinamen können alle möglichen Zeichen beinhalten. Und du sagst, es muss mindestens ein Zeichen vor der Endung kommen. Muss es das?
Denk darüber nach, wieso du das falsch gemacht hast, und wie du dein Denken über Mustererkennung (oder allgemein) ändern musst, damit du Fehler dieser Art nicht mehr machst. In der Programmierung zahlt es sich aus, stets so penibel und klugscheißerisch wie möglich zu sein, denn ein Computer nimmt alles wörtlich. Je genauer man sich ausdrückt, desto genauer versteht er auch das was man meint. Das beinhaltet auch, unnötiges Ausschmücken von Beschreibungen weg zu lassen
PS: Also entweder
.*\.jpg
(usw. für andere Formate) oder.+\.jpg
, je nachdem, wie man die Frage beantwortet, ob vor einer Dateiendung noch ein Zeichen stehen muss oder nicht. Bei vielen Systemen haben Punkte am Anfang von Dateinamen sowieso eine Sonderbedeutung, von daher ist die Antwort in der Praxis nicht wirklich relevant.PPS: Und noch exakter ist es natürlich, nach dem zu Suchen bzw. zu Fragen, was man wirklich will. Du redest was von Quelltexten. Meinst du HTML? Denn dann läge es ja nahe, das HTML zu zerlegen (und zwar nicht mit Regex!) und die Bildtags zu finden. Da weiß man dann wirklich, dass das auch ein Bild ist. Funktioniert dann auch für komische Pfade oder Erweiterungen. Und auch egal, wenn es eine Webseite ist, die im Freitext irgendwo .jpg stehen hat, ohne dass das etwas mit einer Bilddatei zu tun hat (wie zum Beispiel die Seite, die du gerade betrachtest). Das gilt natürlich genauso für andere Arten von Quelltexten.
-
@jaredgerald Stehen denn die Bildnamen fest oder werden die erst zur Laufzeit berechnet.
Was möchtest du als Anfangszeichen nehmen?
in den meisten Progranniersprachen fangen Zeichenketten mit " an.
-
ja " wäre das anfangszeichen und wird auch mit " beendet. genau wird in einem html quelltext gesucht. das heißt ich könnte einfach href= suchen und den bildtag zwischen dem "" ausschneiden... mir wäre es aber am liebsten mit regex.
wie gesagt geht mir auch darum etwas zu lernen.
ich glaub .*.jpg wäre schon so was, was ich suche, allerdings suche ich natürlich mehrere verschiedene dateiformate. Kann ich das mit | einfach hintereinander schreiben?
PS: Programmiersprache(?) ist übrigens python
-
Wahrscheinlich willst du irgendeinen HTML-Parser. Sollte es für Python geben wie Sand am Meer.
-
@jaredgerald sagte in Mustersuche in Quelltexten:
wie gesagt geht mir auch darum etwas zu lernen.
Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.
Ist sicherlich übertrieben, aber oft gar nicht so falsch.
-
Regexes sind ja generell schon gut, wenn es um Mustererkennung geht. Aber die Natur des Problems hier ist nicht Mustererkennung, sondern das Zerlegen eines Texts der in einer formellen Sprache geschrieben ist. Dazu können in bestimmten Fällen auch Regexes ausreichen, aber HTML im Speziellen ist zu komplex dafür. Glücklicherweise ist HTML aber eine vielgesprochene Sprache, daher ist es nicht so schwer, fertige Helfer dafür zu finden. Ein eigener HTML-Parser als Projekt ist sicherlich auch interressant und lehrreich, dürfte aber im keinen Verhältnis zum Nutzen stehen, falls der Nutzen Vorrang vor dem Lerneffekt hat.
-
Es kommt auf drauf an was man erreichen will. Wenn es 100% exakt sein muss, dann muss man natürlich HTML parsen.
Wenn es z.B. nicht 100% exakt sein muss und man auch Filenamen von Bildern finden möchte die im "Text" vorkommen (aber keine Links sind), dann könnte man einfach nach
[^ "']\.(jpg|jpeg|gif|png)(?![a-zA-Z0-9_.\/\-])
oder sowas suchen. Das liefert natürlich nicht den vollständigen Filenamen. D.h. ausgehend vom der Position des Treffers müsste man dann nochmal gucken ob und welche Anführungszeichen verwendet werden und dann entsprechend Beginn und Anfang des Filenamens ermitteln.Das heißt ich könnte einfach href= suchen und den bildtag zwischen dem "" ausschneiden... mir wäre es aber am liebsten mit regex.
Das wäre auch eine relativ einfache Möglichkeit. Ohne das HTML Dokument zu parsen ist das natürlich auch unscharf, aber wäre relativ einfach. z.B. mit
[ \t\r\n]href[ \t\r\n]*=[ \t\r\n]*["']([^"']+\.(jpg|jpeg|gif|png))["']