Seite 1 von 1

Regex: MatchObject -> gefundenen Teilstring ausgeben?

Verfasst: Freitag 16. September 2011, 12:46
von jgillich
Ich habe gerade wahrscheinlich eine Denkblockade, aber ich verstehe nicht so ganz wie ich den gefundenen Text eines Matchobjects ausgeben kann.

Code: Alles auswählen

pattern = re.compile('{"[0-9]*":{"[0-9]*":\[*".*":\[".*".*\]}},')
erg_string = pattern.search(driver.page_source)
if not erg_string:
    exit("fehler")
search() sucht nach einem String in einer Zeile (die seeeeeehr lang ist) und gibt ein MatchObject zurück. Wie kann ich nun den gefundenen Teilstring ausgeben? Ich finde in der Doku dazu überhaupt nichts (http://docs.python.org/library/re.html#re.MatchObject).

Re: Regex: MatchObject -> gefundenen Teilstring ausgeben?

Verfasst: Freitag 16. September 2011, 13:33
von lunar
@jgillich: Ich freue mich, Dir die Dokumentation zur ".group()" vorlesen zu dürfen:
Returns one or more subgroups of the match. […] Without arguments, group1 defaults to zero (the whole match is returned). If a groupN argument is zero, the corresponding return value is the entire matching string; if it is in the inclusive range [1..99], it is the string matching the corresponding parenthesized group.
Beachte auch das schöne Beispiel in der Dokumentation.

Re: Regex: MatchObject -> gefundenen Teilstring ausgeben?

Verfasst: Freitag 16. September 2011, 13:35
von /me
jgillich hat geschrieben:search() sucht nach einem String in einer Zeile (die seeeeeehr lang ist) und gibt ein MatchObject zurück. Wie kann ich nun den gefundenen Teilstring ausgeben? Ich finde in der Doku dazu überhaupt nichts (http://docs.python.org/library/re.html#re.MatchObject).
Du hast keine Gruppe definiert die gefangen werden soll. Wenn du den kompletten String haben willst, dann musst du den kompletten String in Klammern setzen.

Code: Alles auswählen

import re

pattern = re.compile('({"[0-9]*":{"[0-9]*":\[*".*":\[".*".*\]}},)')
match = pattern.search('invalid{"12":{"34":["foo":["bar"]}},invalid')
if match:
    print match.groups()
Möchtest du einzelne Bestandteile haben, dann setz die in Klammern.

Code: Alles auswählen

pattern = re.compile('{"([0-9]*)":{"([0-9]*)":\[*".*":\["(.*)".*\]}},')
Fürs Logbuch: Das war jetzt mein eintausendster Beitrag. :-)

Re: Regex: MatchObject -> gefundenen Teilstring ausgeben?

Verfasst: Freitag 16. September 2011, 13:41
von lunar
@/me: Lies bitte die Dokumentation: Man braucht keine Gruppen, um die vollständige passende Zeichenkette abzufragen.

Re: Regex: MatchObject -> gefundenen Teilstring ausgeben?

Verfasst: Freitag 16. September 2011, 13:52
von /me
lunar hat geschrieben:@/me: Lies bitte die Dokumentation: Man braucht keine Gruppen, um die vollständige passende Zeichenkette abzufragen.
Yes, Sir!

Ich war bei dem gezeigten regulären Ausdruck davon ausgegangen, dass im Endeffekt wahrscheinlich ohnehin nur Teile des Strings benötigt werden. Damit bin ich dann bei match.groups() gelandet und hatte nicht in Betracht gezogen, dass match.groups() nur die Subgroups ab Nummer 1 liefert und den kompletten String außen vor lässt. Ich halte den Ansatz mit Gruppen auch für flexibler.

Re: Regex: MatchObject -> gefundenen Teilstring ausgeben?

Verfasst: Freitag 16. September 2011, 14:09
von jgillich
lunar hat geschrieben:@jgillich: Ich freue mich, Dir die Dokumentation zur ".group()" vorlesen zu dürfen
Hm, verdammt. Ich sagte doch,
jgillich hat geschrieben:Ich habe gerade wahrscheinlich eine Denkblockade
Diese ganzen Regex machen mich noch wahnsinnig. Danke jedenfalls an euch beide. :wink: