Domanda

Come faccio a riscrivere questo nuovo modo per riconoscere indirizzi di lavorare in Python?

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

È stato utile?

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

[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~] 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top