Expresión regular URL de Gruber en Python
Pregunta
¿Cómo puedo volver a escribir esta nueva forma reconocer direcciones para trabajar en Python?
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
Solución
El fuente original para que los estados "Este patrón debería funcionar en la mayoría de las implementaciones de expresiones regulares modernos" y específicamente Perl. aplicación de expresiones regulares de Python es moderno y similar a de Perl, pero le falta el carácter [:punct:]
clase. Usted puede construir fácilmente que el uso de este:
>>> import string, re
>>> pat = r'\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^%s\s]|/)))'
>>> pat = pat % re.sub(r'([-\\\]])', r'\\\1', string.punctuation)
La llamada re.sub()
escapa a ciertos personajes dentro del juego de caracteres según sea necesario .
Editar : El uso de re.escape () funciona igual de bien, ya que simplemente se pega una barra invertida delante de todo . Eso fieltro crudo a mí al principio, pero ciertamente funciona bien para este caso.
>>> pat = pat % re.escape(string.punctuation)
Otros consejos
No creo pitón tiene esta expresión
[:punct:]
Wikipedia dice [:punct:]
es igual a
[-!\"#$%&\'()*+,./:;<=>?@\\[\\\\]^_`{|}~]
Python no tiene la POSIX soporte de expresiones .
La expresión soporte [:punct:]
es equivalente en ASCII a
[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]