Seite 1 von 1

Ausgabe von re.compile bearbeiten.

Verfasst: Samstag 28. Juli 2007, 15:16
von DoubleU
Hallo,

ich habe re.compile() in Verbindung mit findeall() zusammen gebracht um eine einzelnen Link aus einer html Seite herauszufinde. Das ganze hat gut geklappt nun hab ich aber das Problem, das mir der Link so ausgegeben wird.

['http://.......']

um die Ausgabe aber weiter Verarbeiten zu können muss ich die "[" und "]" wegbekommen. Wie kann ich das am besten machen ?


PS. Ich bin noch Anfänger mit Python.


Gruß DoubleU

Verfasst: Samstag 28. Juli 2007, 15:43
von lord.hong
Hallo,

dann bist du ja schon kurz vorm Ziel. :-)
Return a list of all non-overlapping matches of pattern in string. If one or more groups are present in the pattern, return a list of groups; this will be a list of tuples if the pattern has more than one group. Empty matches are included in the result unless they touch the beginning of another match. New in version 1.5.2. Changed in version 2.4: Added the optional flags argument.

http://docs.python.org/lib/node46.html


Dann musst du nun vermutlich nur noch die Liste auswerten, worauf auch die eckigen Klammern hindeuten.

Code: Alles auswählen

resultList = compiledExpression.findall(pattern, string)
for i in len(resultList):
    print resultList
Sollte so funktionieren.

Gruß
Markus

P.S.: Ich bin auch noch Anfänger. ;-)

Verfasst: Samstag 28. Juli 2007, 16:09
von DoubleU
Danke schonmal für den Tipp, hab dass nun mal so auf mein Script angewendet:

Code: Alles auswählen

resultList = re.compile(line).findall(ol.read())
for i in len(resultList):
    print resultList 
bekomme aber so noch diesen Fehler:
for i in len(resultList):
TypeError: 'int' object is not iterable

Gruß DoubleU

Verfasst: Samstag 28. Juli 2007, 17:07
von veers
Das ist auch Unsinn.

Code: Alles auswählen

for match in resultList:
    print match

Verfasst: Samstag 28. Juli 2007, 18:59
von BlackJack
Und falls wirklich nur eine URL gefunden werden soll, ist `search()` vielleicht ein wenig geeigneter als `findall()`.

Verfasst: Sonntag 29. Juli 2007, 11:10
von DoubleU
Hallo,

die Zeilen von veers haben gut Funktioniert. Ich habe auch noch eine andere Möglichkeit gefunden, indem ich mir einfach das erste Ergebniss der Array mit dem anhängen von "[0]" an das Ende der obigen Befehlszeile anhänge.

@BlackJack

Danke, werde ich mir vielleicht nächstesmal einbisschen besser in den Referenzen anschauen, da ich aber das re.compile schon so geschrieben habe, dass es mir nur noch ein Ergebniss liefert konnte ich es auch gut voll mit findall() umsetzen.

Gruß DoubleU

Verfasst: Sonntag 29. Juli 2007, 12:14
von birkenfeld
Das ist doch einerlei. Ob die RE nun ein oder mehrere Ergebnisse liefert, ist search() immer die geeignetste Funktion, wenn man nur am ersten Match interessiert ist.

Verfasst: Sonntag 29. Juli 2007, 17:14
von DoubleU
Wie müsste es dann mit search() aussehen, wenn ich nur das erste match will ?


P.S. Muss ich den Thread irgendwie als gelöst markieren, wenn sich die Frage geklärt hat ?

Gruß DoubleU

Verfasst: Sonntag 29. Juli 2007, 17:31
von Leonidas
DoubleU hat geschrieben:Wie müsste es dann mit search() aussehen, wenn ich nur das erste match will ?

Code: Alles auswählen

>>> import re
>>> match = re.search(r'abc', 'abcdef')
>>> match.group()
'abc'
DoubleU hat geschrieben:P.S. Muss ich den Thread irgendwie als gelöst markieren, wenn sich die Frage geklärt hat ?
Nein.

Verfasst: Sonntag 29. Juli 2007, 17:54
von birkenfeld
DoubleU hat geschrieben:Wie müsste es dann mit search() aussehen, wenn ich nur das erste match will ?
search() liefert dir *nur* den ersten Match.

Verfasst: Donnerstag 2. August 2007, 00:28
von thelittlebug
Leonidas hat geschrieben:
DoubleU hat geschrieben: P.S. Muss ich den Thread irgendwie als gelöst markieren, wenn sich die Frage geklärt hat ?
Nein.
Eventuell was für irgend nen Sticky Thread (jaja die liest niemand, ich bin der einzige, ich weiß eh)

lgherby

p.s. ich war mir da am anfang auch unsicher ob das markiert werden sollte