re.findall alle wichtigen Operatoren.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
john dillinger
User
Beiträge: 8
Registriert: Dienstag 3. September 2013, 10:13

Hi Leute.
Ich bin zurzeit dabei ein wenig mit findall rumzuprobieren, und habe auch einige Testscripts da, aber leider sind mir nicht alle Operatoren klar.
So wie ich es bis jetzt verstanden habe, müsste doch eigentlich

Code: Alles auswählen

print(re.findall(r"(?:[w,W])+.(?:[a-zA-Z])+.(?:[a-z])+|/|(?:[a-zA-Z])+.(?:[a-z])+]"," http://www.python.de und http://www.python.org/index.php und index.php oder http://WWW.python.org oder test")) 
Den Output: ['www.python.de' , 'www.python.org/index.php' , 'WWW.python.org'] geben.
aber es gibt mir nur folgendes aus: ['www.python.de', 'www.python.org', '/', 'WWW.python.org']

Das kann ja eigentlich nur an den Falsch verstandenen Operatoren liegen oder?
Was tut z.B.: (?:[blabla])+ das bewirkt doch nur dass die Zeichenfolge öfters vorhanden sein darf oder?
Und was tut | ?
und Warum bekomme ich / als output. Das macht für mich keinen Sinn, da es am Anfang kein WWWW oder www hat.
Naja ich hoffe ihr versteht mein problem und könnt mir die wichtigsten Operatoren in findall erklären, denn bei google habe ich immer nur Testscripts gefunden, die zwar geholfen haben, aber nur zum bewältigen des Problems und nicht zum verstehen.
Danke schonmal :D
BlackJack

@john dillinger: Wie wärs wenn Du mal die Dokumentation zum `re`-Modul liest. Und dort auch dem Link zum „Regular Expression HOWTO”, ebenfalls Teil der Python-Dokumentation, folgst. Ausserdem kann ich mir nicht vorstellen das eine Suche im Netz nicht auch eine Erklärung der Syntax von regulären Ausdrücken liefert.
john dillinger
User
Beiträge: 8
Registriert: Dienstag 3. September 2013, 10:13

BlackJack hat geschrieben:@john dillinger: Wie wärs wenn Du mal die Dokumentation zum `re`-Modul liest. Und dort auch dem Link zum „Regular Expression HOWTO”, ebenfalls Teil der Python-Dokumentation, folgst. Ausserdem kann ich mir nicht vorstellen das eine Suche im Netz nicht auch eine Erklärung der Syntax von regulären Ausdrücken liefert.
naja ich habe auf gallileo computing geschaut nach re,
da steht zwar etwas zu findall, aber nicht sehr viel, zumindest nichts über die Operatoren die ich nicht verstehe.
Ansosnten gibt es nurnoch foreneinträge, bei denen ein Problemcode gezzeigt wird und die Lösung unten steht, das hilft zwar zu Lösung, aber nciht zum Verständnis, was ja sehr wichtig ist....
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

john dillinger hat geschrieben: naja ich habe auf gallileo computing geschaut nach re,
Na das Buch vergiss am besten sofort - Gründe dafür findest Du zu Hauf nach einer kleinen Suche hier im Forum (oder sogar auf google).

Im offiziellen Tutorial wird iirc sogar auf ein (Python) re-Tutorial verlinkt‽ Wirf da doch mal einen Blick rein.

Last but not least kannst Du auch mal beim Python Module of the week nachgucken, ob es da einen Beitrag zum re-Modul gibt.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
john dillinger
User
Beiträge: 8
Registriert: Dienstag 3. September 2013, 10:13

Hyperion hat geschrieben:
john dillinger hat geschrieben: naja ich habe auf gallileo computing geschaut nach re,
Na das Buch vergiss am besten sofort - Gründe dafür findest Du zu Hauf nach einer kleinen Suche hier im Forum (oder sogar auf google).

Im offiziellen Tutorial wird iirc sogar auf ein (Python) re-Tutorial verlinkt‽ Wirf da doch mal einen Blick rein.

Last but not least kannst Du auch mal beim Python Module of the week nachgucken, ob es da einen Beitrag zum re-Modul gibt.

Ah Ok.
Das tut mir dann Leid.
Ich habe jetzt hier eine Umfassende Referenz mit allen Operatoren zu Regular Expressions gefunden: http://docs.python.org/dev/howto/regex.html
Ich habe dummerweise immer speziell nach findall gesucht, was einfach zu spezifisch war.
Ich habe vorher nur .Net programmiert, wo eine Umfassende Referent von Microsoft gegeben war, deshalb bin ich es nicht so gewohnt, so zu suchen.
Tut mir Leid.
Jetzt weis ich es Ja.
Danke für den Anstoss :D
BlackJack

@john dillinger: Die Argumentation verstehe ich nicht so ganz. Was bist Du nicht gewohnt? Bei .NET schaust Du in die Referenzdokumentation von Microsoft — genau das selbe solltest Du halt auch bei Python machen, in die Dokumentation von Python schauen. Da ist das `re`-Modul dokumentiert. Die Suche danach ist letztlich nicht ander als wenn man in der .NET-Dokumentation nach einer Klasse oder einem Paket sucht. Also keine Suche im grossen Internet, sondern nur Dokumentation zur Standardbibliothek nach dem Modul. Und in der `re`-Dokumentation wird die Syntax kurz erklärt und es gibt einen Link auf das etwas ausführliche HOWTO. Und einen Buchtipp, wenn man es noch ausführlicher haben möchte.
john dillinger
User
Beiträge: 8
Registriert: Dienstag 3. September 2013, 10:13

BlackJack hat geschrieben:@john dillinger: Die Argumentation verstehe ich nicht so ganz. Was bist Du nicht gewohnt? Bei .NET schaust Du in die Referenzdokumentation von Microsoft — genau das selbe solltest Du halt auch bei Python machen, in die Dokumentation von Python schauen. Da ist das `re`-Modul dokumentiert. Die Suche danach ist letztlich nicht ander als wenn man in der .NET-Dokumentation nach einer Klasse oder einem Paket sucht. Also keine Suche im grossen Internet, sondern nur Dokumentation zur Standardbibliothek nach dem Modul. Und in der `re`-Dokumentation wird die Syntax kurz erklärt und es gibt einen Link auf das etwas ausführliche HOWTO. Und einen Buchtipp, wenn man es noch ausführlicher haben möchte.
naja aber in .Net, drückt man im Compiler einfach auf den gewünschten Eintrag, drückt F1, dann poppt das Hilfefenster auf, mit allegmeiner Beschreibung, Erklärung der Operatoren und einem Beispiel.
Leichter geht es kaum.
Deshalb, war ich es nicht gewöhnt im Internet nach Codesbeispielen bzw. Referenzen zu suchen und habe deswegen meine Suche viel zu spezifisch gestaltet, so wie ich es bei .NET kannte, wo man ganz spezifisch genau dieses Modul bekommen hat....
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Der reguläre Ausdruck sieht echt übel aus und wird auch so manchen Treffer liefern, den man (vermutlich) gar nicht haben wollte. Je nachdem wie "gemein" die vorliegenden Daten sind.
Sirius3
User
Beiträge: 17753
Registriert: Sonntag 21. Oktober 2012, 17:20

Code: Alles auswählen

>>> print(re.findall(r"(?:[w,W])+.(?:[a-zA-Z])+.(?:[a-z])+|/|(?:[a-zA-Z])+.(?:[a-z])+]",'Der reguläre Ausdruck sieht echt übel aus und wird auch so manchen Treffer liefern, den man (vermutlich) gar nicht haben wollte. Je nachdem wie "gemein" die vorliegenden Daten sind.')
['wird auch', ', den man', 'wollte']
BlackJack

@john dillinger: Na gut ganz so einfach ist es nicht, aber du hast schon wieder suchen im Internet nach Beispielen als Alternative geschrieben. Ist es denn echt so schwer in die DOKUMENTATION VON PYTHON!!!111ELF! zu schauen statt irgendwo wild im Internet zu suchen? Dir ist das Prinzip von spezifischer Dokumentation zu Software schon bekannt, oder? Die Python-Dokumentation hat eine Suchfunktion und einen Index mit dem es nur geringfügig schwieriger ist als F1 zu drücken zu der Information zu kommen.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sirius3 hat geschrieben:

Code: Alles auswählen

>>> print(re.findall(r"(?:[w,W])+.(?:[a-zA-Z])+.(?:[a-z])+|/|(?:[a-zA-Z])+.(?:[a-z])+]",'Der reguläre Ausdruck sieht echt übel aus und wird auch so manchen Treffer liefern, den man (vermutlich) gar nicht haben wollte. Je nachdem wie "gemein" die vorliegenden Daten sind.')
['wird auch', ', den man', 'wollte']
Jawollo. :D
Antworten