Seite 1 von 1

re - problem

Verfasst: Dienstag 19. August 2003, 23:20
von Gast
Hi ,
ich bin am verzweifeln was mach ich bei falsch , warum funktioniert
das nicht eigentlich müsste er doch die gefundenen groups ausgeben.

import re
def extract():
proxy_list = "blabla199.105.122.121as"

pattern=re.compile(r'^(\d{2,3})\.(\d{2,3})\.(\d{2,3})\.(\d{2,3})$')
match = pattern.search(proxy_list).groups()
print match
Fehler Meldung ist "NoneType " object has no attribute "groups"
Das ganze soll also aus einer liste die ips raussuchen ...
Bin für jede Hilfe Dankbar

Re: re - problem

Verfasst: Mittwoch 20. August 2003, 07:09
von Voges
Hallo!
Anonymous hat geschrieben: proxy_list = "blabla199.105.122.121as"
pattern=re.compile(r'^(\d{2,3})\.(\d{2,3})\.(\d{2,3})\.(\d{2,3})$')
Mit ^ und $ hast Du festgelegt, dass der String zwingend mit \d anfangen und aufhören muss. Tut Dein Beispiel-String aber nicht.
Jan

re-Problem

Verfasst: Donnerstag 21. August 2003, 11:32
von HarryH
Hallo

Versuch es mal mit:

Code: Alles auswählen

proxy_list = "blabla199.105.122.121as"
print re.findall("[\d{3}\.?]{15}",proxy_list)
Harry

Re: re-Problem

Verfasst: Donnerstag 21. August 2003, 11:51
von Voges
Hallo!
HarryH hat geschrieben:

Code: Alles auswählen

print re.findall("[\d{3}\.?]{15}",proxy_list)
Na, das ist aber ziemlich verquer. Der OP will ja wohl IPs erkennen, deren Zahlen 2- oder 3-stellig sein dürfen. Mit [] bildest Du nur eine Zeichenmenge, und die besteht bei Dir aus den Zeichen '0' bis '9', '{', '}', '.' und '?'. Danach enthielten "blabla?...?{{???}}???as" und "blabla...23..23..4...as" also gültige IPs, "blabla123.123.12.12as" dagegen nicht.

Der Regexp des OPs war ja ok. Er muss nur eben ^ und $ weglassen.

Jan

re:Problem

Verfasst: Donnerstag 21. August 2003, 13:26
von HarryH
Hallo Jan

Du hattest wirklich recht! Das war nicht besonders gut überlegt von mir.

Harry

Re: re - problem

Verfasst: Donnerstag 21. August 2003, 16:03
von Qbi
Anonymous hat geschrieben: proxy_list = "blabla199.105.122.121as"
pattern=re.compile(r'^(\d{2,3})\.(\d{2,3})\.(\d{2,3})\.(\d{2,3})$')
Eine einfache Methode, um IP-Adressen zu erkennen, ist:

Code: Alles auswählen

\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
Wenn alle deine Beispiele wie oben sind, sollte das relativ gut passen. Muss du wirklich genau die IP-Adressen erkennen, müsste hier noch etwas nachbessern.