Question

Comment puis-je réécris cette nouvelle façon de reconnaître adresses en Python?

\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))

Était-ce utile?

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 à

[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~] 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top