Ausgabe von re.compile bearbeiten.

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.
Benutzeravatar
DoubleU
User
Beiträge: 4
Registriert: Donnerstag 26. Juli 2007, 13:29
Kontaktdaten:

Ausgabe von re.compile bearbeiten.

Beitragvon DoubleU » Samstag 28. Juli 2007, 15:16

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
lord.hong
User
Beiträge: 26
Registriert: Samstag 19. August 2006, 12:32

Beitragvon lord.hong » Samstag 28. Juli 2007, 15:43

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. ;-)
Benutzeravatar
DoubleU
User
Beiträge: 4
Registriert: Donnerstag 26. Juli 2007, 13:29
Kontaktdaten:

Beitragvon DoubleU » Samstag 28. Juli 2007, 16:09

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
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Beitragvon veers » Samstag 28. Juli 2007, 17:07

Das ist auch Unsinn.

Code: Alles auswählen

for match in resultList:
    print match
BlackJack

Beitragvon BlackJack » Samstag 28. Juli 2007, 18:59

Und falls wirklich nur eine URL gefunden werden soll, ist `search()` vielleicht ein wenig geeigneter als `findall()`.
Benutzeravatar
DoubleU
User
Beiträge: 4
Registriert: Donnerstag 26. Juli 2007, 13:29
Kontaktdaten:

Beitragvon DoubleU » Sonntag 29. Juli 2007, 11:10

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
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Sonntag 29. Juli 2007, 12:14

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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
DoubleU
User
Beiträge: 4
Registriert: Donnerstag 26. Juli 2007, 13:29
Kontaktdaten:

Beitragvon DoubleU » Sonntag 29. Juli 2007, 17:14

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 29. Juli 2007, 17:31

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Sonntag 29. Juli 2007, 17:54

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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
thelittlebug
User
Beiträge: 187
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Beitragvon thelittlebug » Donnerstag 2. August 2007, 00:28

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder