¿Cómo reescribo las direcciones new way to recognise para trabajar en Python?Expresión regular URL de Gruber en Python
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
¿Cómo reescribo las direcciones new way to recognise para trabajar en Python?Expresión regular URL de Gruber en Python
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
El original source 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. La implementación de expresiones regulares de Python es moderna y similar to Perl's pero falta la clase de caracteres [:punct:]
. 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 as required.
Editar: Usando re.escape() funciona igual de bien, ya que simplemente se pega una barra invertida delante de todo . Eso me pareció grosero al principio, pero ciertamente funciona bien para este caso.
>>> pat = pat % re.escape(string.punctuation)
Esto pasa todas las pruebas de Gruber, al igual que pat = pat% re.escape (string.punctuation) – Tobias
@vanity, actualizado para mencionarlo. Tenga en cuenta lo obvio, que si su fuente de datos es Unicode, una solución pura ASCII como string.punctuation puede dar resultados imperfectos. –
Funciona con dominios y rutas que no son ASCII. No tengo datos de prueba con puntuación que no sea en inglés. – Tobias
No creo pitón tienen esta expresión
[:punct:]
Wikipedia dice [:punct:]
es igual a
[-!\"#$%&\'()*+,./:;<=>[email protected]\\[\\\\]^_`{|}~]
Wikipedia está equivocada. Le falta el cursor, según http://www.regular-expressions.info/posixbrackets.html. –
Bien, ahora está bien. Por favor actualiza tu respuesta. –
Sí, actualicé mi publicación, gracias. Alguien actualizó Wikipedia también. ¡Estupendo! – YOU
Python no tiene la POSIX bracket expressions.
La expresión de corchetes [:punct:]
es equivalente en ASCII a
[!"#$%&'()*+,\-./:;<=>[email protected][\\\]^_`{|}~]
Asegúrate de usar una cadena "cruda" (prefijo con 'r') cuando lo uses, ya que de lo contrario la escara se escapa. –
También tenga en cuenta que Python no admite esas propiedades de caracteres Unicode: http://stackoverflow.com/questions/1832893 –
De hecho, compilan bien pero no hacen lo que espera – Tobias
¿Qué parte no funciona? –
¿Por qué no pones tu código en la pregunta? Con ejemplos de lo que falla –
@vanity, la respuesta con propiedades de caracteres Unicode no funcionará. Ver http://stackoverflow.com/questions/1832893/python-regex-matching-unicode-properties –