URL de Gruber Expression régulière en Python
Question
Comment puis-je réécris cette nouvelle façon de reconnaître adresses en Python?
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
La solution
Le source d'origine pour que les États « Ce modèle devrait fonctionner dans la plupart des implémentations de regex modernes » et spécifiquement Perl. La mise en œuvre de regex de Python est moderne et similaire à Perl, mais il manque le caractère [:punct:]
classe. Vous pouvez facilement construire qu'utiliser ceci:
>>> import string, re
>>> pat = r'\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^%s\s]|/)))'
>>> pat = pat % re.sub(r'([-\\\]])', r'\\\1', string.punctuation)
L'appel re.sub()
échappe certains caractères à l'intérieur du jeu de caractères rel="noreferrer"> .
Modifier : L'utilisation re.escape () fonctionne tout aussi bien, car il colle juste une barre oblique inverse devant tout . Ce feutre brut pour moi au début, mais certainement fonctionne très bien pour ce cas.
>>> pat = pat % re.escape(string.punctuation)
Autres conseils
Je ne pense pas avoir python cette expression
[:punct:]
Wikipédia dit [:punct:]
est à même
[-!\"#$%&\'()*+,./:;<=>?@\\[\\\\]^_`{|}~]
Python ne pas les POSIX expressions entre crochets .
L'expression de support [:punct:]
est équivalent en ASCII à
[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]