URL Regular Expression di Gruber in Python
Domanda
Come faccio a riscrivere questo nuovo modo per riconoscere indirizzi di lavorare in Python?
\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))
Soluzione
Il originale fonte che afferma "Questo modello dovrebbe funzionare nella maggior parte dei moderni implementazioni regex" e specificamente Perl. implementazione regex di Python è moderno e simile a quella di Perl ma manca il carattere [:punct:]
classe. Si può facilmente costruire che l'utilizzo di questo:
>>> import string, re
>>> pat = r'\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^%s\s]|/)))'
>>> pat = pat % re.sub(r'([-\\\]])', r'\\\1', string.punctuation)
La chiamata re.sub()
sfugge alcuni caratteri all'interno del set di caratteri rel="noreferrer"> .
Modifica : Usando re.escape () funziona altrettanto bene, dal momento che solo infila un backslash davanti a tutto . Che feltro greggio a me in un primo momento, ma sicuramente funziona bene per questo caso.
>>> pat = pat % re.escape(string.punctuation)
Altri suggerimenti
Non credo python ha questa espressione
[:punct:]
Wikipedia dice [:punct:]
è lo stesso di
[-!\"#$%&\'()*+,./:;<=>?@\\[\\\\]^_`{|}~]
Python non ha le POSIX espressioni fra parentesi quadre .
L'espressione staffa [:punct:]
è equivalente in ASCII
[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]