Code: Alles auswählen
'\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}'
Sebastian
Das Skript: http://paste.pocoo.org/show/87905/
Code: Alles auswählen
'\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}'
Naja, Klammern drum gesetzt:BlackJack hat geschrieben:Was hast Du denn schon versucht? Ich meine Du weisst ja ganz offensichtlich schon wie man eine Ziffer auf 1 bis 3 Wiederholungen begrenzt.
Code: Alles auswählen
'(\d[.]){3}'
Code: Alles auswählen
In [44]: s = 'bla 12.345.6.789 blupp'
In [45]: re.findall('(\d{1,3}([.]\d{1,3}){3})', s)[0][0]
Out[45]: '12.345.6.789'
Code: Alles auswählen
In [64]: s
Out[64]: 'bla 12.34.567.890 blupp'
In [65]: re.findall('[\d+.]*', s)
Out[65]: ['', '', '', '', '12.34.567.890', '', '', '', '', '', '', '']
Code: Alles auswählen
In [267]: re.findall(r'[\d+.]*', '1.2.3.4.5.6.7 . ... 42')
Out[267]: ['1.2.3.4.5.6.7', '', '.', '', '...', '', '42', '']
Code: Alles auswählen
In [123]: re.findall('[\d+.]*\W', s)
Out[123]: ['1.2.3.4.5.6.7 ', '. ', '... ']
Code: Alles auswählen
In [315]: re.findall('[\d+.]*', '1+2-3')
Out[315]: ['1+2', '', '3', '']
Warum? Weil das letzte .789 auch gefunden wird? Dann benutze einfach nicht-gruppierende Klammern:snafu hat geschrieben:Die Lösung von Fred funktioniert:
Aber wirklich glücklich bin ich damit noch nicht...Code: Alles auswählen
In [44]: s = 'bla 12.345.6.789 blupp' In [45]: re.findall('(\d{1,3}([.]\d{1,3}){3})', s)[0][0] Out[45]: '12.345.6.789'
Code: Alles auswählen
>>> s = 'bla 12.345.6.789 blupp'
>>> re.findall('(\d{1,3}(?:[.]\d{1,3}){3})', s)
['12.345.6.789']
Ich fand die Gruppierung an sich unnötig, wusste aber nicht wie ich sie wegbekomme bzw dass sowas relativ einfach geht. Regexes sind nicht wirklich meine Stärke...helduel hat geschrieben:Warum? Weil das letzte .789 auch gefunden wird? Dann benutze einfach nicht-gruppierende Klammern:
Code: Alles auswählen
In [322]: socket.gethostbyname('www.heise.de')
Out[322]: '193.99.144.85'
Nö, nicht die Bohne:snafu hat geschrieben:Aber mal eine generelle Frage: Die Variante "dreimal Digits-Punkt und einmal Digits" ist tätsächlich schwieriger darzustellen als "einmal Digits gefolgt von dreimal Punkt-Digits"?
Code: Alles auswählen
# Digits + 3x Punkt-Digits
re.findall('(\d{1,3}(?:[.]\d{1,3}){3})', s)
# 3x Digits-Punkt + Digits
re.findall('((?:\d{1,3}[.]){3}\d{1,3})', s)
Folgendes sollte klappen:snafu hat geschrieben:Ist auch etwas internes für die eigene IP möglich? Ich wähle mich über ein DSL-Modem ein, falls das von Belang ist.
Code: Alles auswählen
import socket
socket.gethostbyname(socket.gethostname())
# oder
socket.gethostbyname_ex(socket.gethostname())
Code: Alles auswählen
import urllib
f = urllib.urlopen("http://checkip.dyndns.org/")
print f.read()
f.close()