Pregunta

¿Cómo puedo volver a escribir esta nueva forma reconocer direcciones para trabajar en Python?

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

¿Fue útil?

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

[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~] 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top