Grubers URL Regular Expression in Python
Frage
Wie umschreiben ich diese neue Art und Weise Adressen zur Arbeit zu erkennen in Python?
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
Lösung
Die Originalquelle , dass die Staaten „Dieses Muster sollte in den meisten modernen Regex-Implementierungen arbeiten“ und speziell Perl. Python Regex Implementierung ist modern und ähnlich wie Perl aber fehlt das [:punct:]
Charakter Klasse. Sie können ganz einfach bauen, dass die Nutzung dieses:
>>> import string, re
>>> pat = r'\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^%s\s]|/)))'
>>> pat = pat % re.sub(r'([-\\\]])', r'\\\1', string.punctuation)
Der re.sub()
Anruf entgeht bestimmte Zeichen in dem Zeichensatz nach Bedarf .
Bearbeiten : Mit re.escape () funktioniert genauso gut, da es nur einen Backslash vor klebt alles . Das fühlte sich Rohöl mir zuerst, aber sicher funktioniert gut für diesen Fall.
>>> pat = pat % re.escape(string.punctuation)
Andere Tipps
Ich glaube nicht, Python hat diesen Ausdruck
[:punct:]
Wikipedia sagt [:punct:]
ist gleich
[-!\"#$%&\'()*+,./:;<=>?@\\[\\\\]^_`{|}~]
Python hat nicht die POSIX Klammerausdrücke .
Der [:punct:]
Klammerausdruck entspricht in ASCII
[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]