Tutorial sulle espressioni regolari di Python | Tutorial su Python Regex

Contenuti

Rilevanza delle espressioni regolari

Negli ultimi anni, c'è stato un cambiamento drammatico nell'uso di linguaggi di programmazione generici per la scienza dei dati e l'apprendimento automatico. Non è sempre stato così: un decennio fa, Questo pensiero avrebbe incontrato molti occhi scettici!

Ciò significa che più persone / le istituzioni utilizzano strumenti come Python / JavaScript per risolvere le tue esigenze di dati. È qui che le espressioni regolari diventano super utili. Le espressioni regolari sono regolarmente il modo predefinito per pulire e contestare i dati nella maggior parte di questi strumenti.. O l'estrazione di parti specifiche di testo da pagine web, dai un senso ai dati di Twitter o prepara i tuoi dati per l'estrazione di testo, regex è la scelta migliore per tutte queste attività.

Data la sua applicabilità, ha senso conoscerli e usarli correttamente.

Cosa imparerai da questo post?

In questo post, Ti guiderò nell'uso, esempi e applicazioni di espressioni regolari. Le espressioni regolari sono molto popolari tra i programmatori e possono essere applicate in molti linguaggi di programmazione come Java, JS, php, C ++, eccetera. Per sviluppare la nostra comprensione, abbiamo spiegato questo concetto usando il linguaggio di programmazione Python. All'estremità, ho risolto vari problemi usando regex.

impara le espressioni regolari in Python

Iniziamo!

Che cos'è l'espressione regolare e come viene utilizzata?

Brevemente, l'espressione regolare è una sequenza di caratteri utilizzata principalmente per trovare e sostituire modelli in una stringa o in un file. Come ho detto precedentemente, sono compatibili con la maggior parte dei linguaggi di programmazione come python, perla, R, Java e molti altri. Quindi, impararli aiuta in molti modi (Più su questo più tardi).

Le espressioni regolari utilizzano due tipi di caratteri:

un) metacaratteri: Come suggerisce il nome, questi caratteri hanno un significato speciale, equivalente a * nel jolly.

B) letterali (Come, B, 1,2…)

e pitone, abbiamo il modulo “RifCosa aiuta con le espressioni regolari. Quindi devi importare la libreria Rif prima di poter usare le espressioni regolari in Python.

Usa questo codice --> Importa re

Gli usi più comuni delle espressioni regolari sono:

  • Cerca una stringa (cerca e abbina)
  • Trova una stringa (trova tutto)
  • Rompi la stringa in una sottostringa (Condividere)
  • Sostituisci parte di una stringa (sub)

Vediamo i metodi che la libreria “Rif”Prevede di eseguire questi compiti.

Nota: Abbiamo anche un videocorso sull'elaborazione del linguaggio naturale che copre anche le espressioni regolari. Controllalo!

Quali sono i diversi metodi regex?

Il pacchetto 're'’ fornisce vari metodi per interrogare una stringa di input. Ecco i metodi più utilizzati, Discuterò:

  1. rivincita()
  2. indagare()
  3. re.trovare ()
  4. re.split ()
  5. re.sub ()
  6. ri.compila ()

Vediamoli uno per uno.

rivincita(Modello, corda):

Questo metodo trova una corrispondenza se si verifica all'inizio della stringa. Come esempio, chiama partita () en la cadena ‘AV Analytics AV’ e cerca un "modello AV"’ corrisponderà. Nonostante questo, se cerchiamo solo Analytics, il modello non corrisponderà. Facciamolo in Python ora.

Ecco una finestra di codifica dal vivo per iniziare. Puoi eseguire i codici e ottenere il risultato in questa finestra:

Sopra puoi vedere la posizione iniziale e finale del modello corrispondente "AV"’ sulla corda e, A volte, aiuta molto quando si esegue la manipolazione della corda.

indagare(Modello, corda):

È equivalente a corrispondere () ma non ci limita a cercare corrispondenze solo all'inizio della stringa. A differenza del metodo precedente, qui la ricerca del 'pattern analitico’ restituirà una partita.

Codice

risultato = Rif.ricerca(r'Analisi', 'AV DataPeaker AV')
Stampa risultato.gruppo(0)
Produzione:
Analisi

Qui puoi vedere che il metodo di ricerca () può trovare uno schema da qualsiasi posizione nella stringa, ma restituisce solo la prima occorrenza del modello di ricerca.

re.trovareModello, corda):

Quella aiuta a ottenere un elenco di tutti i modelli corrispondenti. Non hai restrizioni di ricerca dall'inizio o dalla fine. Se usiamo il metodo findall per cercare 'AV’ in una data stringa, restituirà entrambe le occorrenze di AV. Durante la ricerca di una stringa, Ti consiglierei di usare re.trovare () per sempre, può funzionare come re.search () y re.match () entrambi.

Codice

risultato = Rif.trova tutto(ambra', 'AV DataPeaker AV')
Stampa risultato

Produzione:
['DI', 'DI']

re.splitModello, corda, [maxsplit=0]):

Questo metodo aiuta a dividere corda dalle occorrenze di dato Modello.

Codice

risultato=Rif.diviso(r'y',"Analisi")
risultato

Produzione:
['Anale', 'tic']

Al di sopra, abbiamo diviso la catena “Analisi” di “e”. Il metodo diviso () ha un altro argomento “maxsplit“. Ha un valore predefinito di zero. In questa circostanza fa le massime divisioni che si possono fare, ma se diamo valore a maxsplit, dividerà la catena. Vediamo il seguente esempio:

Codice

risultato=Rif.diviso(r'io','DataPeaker')
risultato di stampa

Produzione:
['Analisi', 'cs V', 'dya'] #Ha eseguito tutte le spaccate che si possono fare per schema "io".

Codice

risultato=Rif.diviso(r'io','DataPeaker',maxsplit=1)
risultato

Produzione:
['Analisi', 'cs Vidya']

Qui, puoi vedere che abbiamo impostato maxsplit in 1. E il risultato è che ha solo due valori, mentre il primo esempio ha tre valori.

re.subModello, risponditore, corda):

Aiuta a trovare un modello e sostituirlo con una nuova sottostringa. Se il modello non viene trovato, corda viene restituito invariato.

Codice

risultato=Rif.sub(r'India','il mondo',"AV è la più grande comunità di Analytics dell'India")
risultato
Produzione:
"AV è la più grande community di Analytics del mondo"

ri.compilaModello, risponditore, corda):

Possiamo combinare un modello regex in oggetti modello, che può essere usato per abbinare i modelli. È anche utile cercare di nuovo un modello senza ridigitarlo..

Codice

importare Rif
modello=Rif.compilare('DI')
risultato=modello.trova tutto('AV DataPeaker AV')
Stampa risultato
risultato2=modello.trova tutto("AV è la più grande comunità di analisi dell'India")
Stampa risultato2
Produzione:
['DI', 'DI']
['DI']

Riepilogo rapido dei vari metodi:

Fino ad ora, analizziamo vari metodi regex usando un modello costante (caratteri fissi). Ma, Cosa succede se non abbiamo un modello di ricerca costante e vogliamo restituire un insieme specifico di caratteri? (definito da una regola) di una catena? Non farti intimidire.

Questo può essere facilmente risolto definendo un'espressione con l'aiuto di operatori di pattern (caratteri meta e letterali). Diamo un'occhiata agli operatori di pattern più comuni.

Quali sono gli operatori più utilizzati?

Le espressioni regolari possono specificare modelli, non solo caratteri fissi. Questi sono gli operatori più utilizzati che aiutano a generare un'espressione per rappresentare i caratteri richiesti in una stringa o in un file. Comunemente utilizzato nel web scraping e nel text mining per estrarre le informazioni richieste.

operatori Descrizione
. Corrisponde a qualsiasi singolo carattere tranne la nuova riga ‘ n'.
? essere d'accordo con 0 oh 1 aspetto del motivo alla tua sinistra
+ 1 o più occorrenze del modello alla tua sinistra
* 0 o più presenze del motivo alla tua sinistra
w Corrisponde a un carattere alfanumerico mentre W (W mayuscula) corrisponde a un carattere non alfanumerico.
D Corrispondenze cifre [0-9] e / D (D mayuscula) corrisponde a nessuna cifra.
S Corrisponde a un singolo carattere di spazio bianco (spazio, nuova linea, Restituzione, tabulazione, modulo) y S (S mayúscula) corrisponde a qualsiasi carattere non di spaziatura.
B confine tra parola e non parola e / B è opposto / B
[..] Corrisponde a qualsiasi singolo carattere tra parentesi e [^..] corrisponde a qualsiasi singolo carattere che non sia tra parentesi
Utilizzato per caratteri di significato speciale come . coincidere con un punto o + per il segno più.
^ e $ ^ e $ corrisponde rispettivamente all'inizio o alla fine della stringa
{Nuovo Messico} Corrisponde ad almeno n e al massimo m occorrenze dell'espressione precedente se la scriviamo come {, m} quindi restituirà almeno qualsiasi occorrenza minima alla massima m precedente all'espressione.
un | B Corrisponde a o b
() Raggruppa le espressioni regolari e restituisce il testo corrispondente
T, n, R Scheda Partite, nuova linea, Restituzione

Per maggiori dettagli sui metacaratteri “(“, “)”, “|” e altri dettagli, puoi controllare questo link (https://docs.python.org/2/library/re.html).

Ora, Comprendiamo gli operatori di pattern guardando i seguenti esempi.

Alcuni esempi di espressioni regolari

Problema 1: Restituisce la prima parola di una data stringa

Soluzione-1 Estrai ogni carattere (usando “ w)

Codice

importare Rif
risultato=Rif.trova tutto(R'.',"AV è la più grande comunità di Analytics dell'India")
Stampa risultato

Produzione:
['UN', 'V', ' ', 'io', 'S', ' ', 'l', 'un', 'R', 'G', 'e', 'S', 'T', ' ', 'UN', 'n', 'un', 'l', 'e', 'T', 'io', 'C', 'S', ' ', 'C', 'O', 'm', 'm', 'tu', 'n', 'io', 'T', 'e', ' ', 'O', 'F', ' ', 'IO', 'n', 'D', 'io', 'un']

Sopra estrae anche lo spazio, ora per evitare che venga utilizzato “ w” invece di “.“.

Codice

risultato=Rif.trova tutto(r'w',"AV è la più grande comunità di Analytics dell'India")
Stampa risultato

Produzione:
['UN', 'V', 'io', 'S', 'l', 'un', 'R', 'G', 'e', 'S', 'T', 'UN', 'n', 'un', 'l', 'e', 'T', 'io', 'C', 'S', 'C', 'O', 'm', 'm', 'tu', 'n', 'io', 'T', 'e', 'O', 'F', 'IO', 'n', 'D', 'io', 'un']

Soluzione-2 Estrai ogni parola (usando “*” oh “+)

Codice

risultato=Rif.trova tutto(r'w*',"AV è la più grande comunità di Analytics dell'India")
Stampa risultato

Produzione:
['DI', '', 'è', '', 'maggiore', '', "Analisi", '', 'Comunità', '', 'di', '', 'India', '']

Un'altra volta, sta restituendo lo spazio come una parola perché “*”Restituisce zero o più corrispondenze di pattern alla sua sinistra. Ora, per cancellare gli spazi, andremo con “+“.

Codice

risultato=Rif.trova tutto(r'w+',"AV è la più grande comunità di Analytics dell'India")
Stampa risultato
Produzione:
['DI', 'è', 'maggiore', "Analisi", 'Comunità', 'di', 'India']

Soluzione-3 Estrai ogni parola (usando “^)

Codice

risultato=Rif.trova tutto(r'^w+',"AV è la più grande comunità di Analytics dell'India")
Stampa risultato

Produzione:
['DI']

Se usiamo "$" invece di "^", restituirà la parola dalla fine della stringa. Veamoslo.

Codice

risultato=Rif.trova tutto(r'w+$',"AV è la più grande comunità di Analytics dell'India")
Stampa risultato
Produzione:

['India']

Problema 2: Restituisce i primi due caratteri di ogni parola

Soluzione-1 Estrai due caratteri consecutivi da ogni parola, spazi esclusi (usando “ w)

Codice

risultato=ri.trovare(r'ww',"AV è la più grande comunità di Analytics dell'India")
risultato di stampa

Produzione:
['DI', 'è', 'il', 'rg', 'è', 'Un', 'al', 'sì', 'circuito integrato', 'co', 'mm', 'un', 'esso', 'di', 'In', 'di']

Soluzione-2 Estrai due caratteri consecutivi tra quelli disponibili all'inizio del confine di parola (usando “B)

risultato=Rif.trova tutto(r'bw.',"AV è la più grande comunità di Analytics dell'India")
Stampa risultato

Produzione:
['DI', 'è', 'il', 'Un', 'co', 'di', 'In']

Problema 3: Restituisce il tipo di dominio degli ID email forniti

Per spiegarlo semplicemente, Ci tornerò con un approccio passo dopo passo:

Soluzione-1 Estrai tutti i caratteri dopo “@”

Codice

risultato=Rif.trova tutto(r'@w+','[e-mail protetta], [e-mail protetta], [e-mail protetta], [e-mail protetta]') 
Stampa risultato 
Produzione: ['@gmail', '@test', '@analyticsvidhya', '@riposo']

Al di sopra, puoi vedere che la parte “.insieme a”, “.in” non è estratto. Per aggiungerlo, andremo con il seguente codice.

risultato=ri.trovare(r'@w+.w+','[e-mail protetta], [e-mail protetta], [e-mail protetta], [e-mail protetta]')
risultato di stampa
Produzione:
["@gmail.com", '@test.in', '@analyticsvidhya.com', '@rest.biz']

Soluzione – 2 Estrai solo il nome di dominio usando “()”

Codice

risultato=ri.trovare(r'@w+.(w+)','[e-mail protetta], [e-mail protetta], [e-mail protetta], [e-mail protetta]')
risultato di stampa
Produzione:
['insieme a', 'in', 'insieme a', "biz"]

Problema 4: data di ritorno della stringa data

Qui useremo “D”Per estrarre la cifra.

Soluzione:

Codice

risultato=ri.trovare(r'd{2}-D{2}-D{4}','Amit 34-3456 12-05-2007, XYZ 56-4532 11-11-2011, ABC 67-8945 12-01-2009')
risultato di stampa
Produzione:
['12-05-2007', '11-11-2011', '12-01-2009']

Se vuoi estrarre solo un anno, la parentesi"()" ti aiuterà.

Codice


risultato=Rif.trova tutto(r'd{2}-D{2}-(D{4})','Amit 34-3456 12-05-2007, XYZ 56-4532 11-11-2011, ABC 67-8945 12-01-2009')
Stampa risultato
Produzione:
['2007', '2011', '2009']

Problema 5: Restituisce tutte le parole in una stringa che iniziano con una vocale

Soluzione-1 Restituisce ogni parola

Codice

risultato=Rif.trova tutto(r'w+',"AV è la più grande comunità di Analytics dell'India")
Stampa risultato

Produzione:
['DI', 'è', 'maggiore', "Analisi", 'Comunità', 'di', 'India']

Soluzione-2 Le parole di ritorno iniziano con alfabeti (usando [])

Codice

risultato=Rif.trova tutto(R'[aeiouAEIOU]w+',"AV è la più grande comunità di Analytics dell'India")
Stampa risultato

Produzione:
['DI', 'è', 'più grande', "Analisi", 'comunità', 'di', 'India']

Sopra puoi vedere che è tornato “argest” e “comunità” dal centro delle parole. Per cancellare questi due, dobbiamo usare ” B” per il limite della parola.

Soluzione 3

Codice

risultato=Rif.trova tutto(r'b[aeiouAEIOU]w+',"AV è la più grande comunità di Analytics dell'India")
Stampa risultato 

Produzione:
['DI', 'è', "Analisi", 'di', 'India']

Equivalentemente, possiamo estrarre parole che iniziano con costante usando "^" tra parentesi.

Codice

risultato=Rif.trova tutto(r'b[^ aeiouAEIOU]w+',"AV è la più grande comunità di Analytics dell'India")
Stampa risultato

Produzione:
[' è', ' maggiore', "Analisi", ' Comunità', ' di', ' India']

Sopra puoi vedere che hai restituito parole che iniziano con spazio. Per rimuoverlo dall'output, includi uno spazio tra parentesi[].

Codice

risultato=Rif.trova tutto(r'b[^ aeiouAEIOU ]w+',"AV è la più grande comunità di Analytics dell'India")
Stampa risultato

Produzione:
['maggiore', 'Comunità']


Problema 6: convalidare un numero di telefono (il numero di telefono deve avere 10 cifre e inizia con 8 oh 9)

Abbiamo un elenco di numeri di telefono nell'elenco “al” e qui convalideremo i numeri di telefono usando

Soluzione

Codice

importare re
li=['999999999','999999-999','99999x9999']
per val in li:
 se ri.match(R'[8-9]{1}[0-9]{9}',valore) e len(valore) == 10:
     stampa "sì"
 altro:
     stampa 'no'
Produzione:
sì
no
no

Problema 7: dividere una stringa con molti delimitatori

Soluzione

Codice

importare Rif
linea = 'asdf fjdk;afed,fjek,asdf,pippo' # La stringa ha più delimitatori (";",","," ").
risultato= Rif.diviso(R'[;,S]', linea)
Stampa risultato

Produzione:
['asdf', 'fjdk', 'nutrito', 'fjek', 'asdf', 'pippo']

Possiamo anche usare il metodo re.sub () per sostituire questi delimitatori multipli con uno come spazio "".

Codice

importare Rif
linea = 'asdf fjdk;afed,fjek,asdf,pippo'
risultato= Rif.sub(R'[;,S]',' ', linea)
Stampa risultato

Produzione:
asdf fjdk afed fjek asdf foo

Problema 8: recuperare informazioni da un file HTML

Voglio estrarre informazioni da un file HTML (vedere i dati di esempio di seguito). Qui dobbiamo estrarre le informazioni disponibili tra

e

tranne il primo indice numerico. Ho assunto qui che il codice html di seguito sia memorizzato in una stringa str.

Esempio di file HTML (str)

<tr allineare="centro"><td>1</td> <td>Noè</td> <td>Emma</td></vero>
<tr allineare="centro"><td>2</td> <td>Liam</td> <td>Olivia</td></vero>
<tr allineare="centro"><td>3</td> <td>Muratore</td> <td>Sofia</td></vero>
<tr allineare="centro"><td>4</td> <td>Giacobbe</td> <td>Isabella</td></vero>
<tr allineare="centro"><td>5</td> <td>William</td> <td>Ava</td></vero>
<tr allineare="centro"><td>6</td> <td>Ethan</td> <td>Mia</td></vero>
<tr allineare="centro"><td>7</td> <td HTML>Michael</td> <td>emily</td></vero>

Soluzione:

Codice

risultato=ri.trovare(R'<td>w+</td>S<td>(w+)</td>S<td>(w+)</td>',str)
risultato di stampa
Produzione:
[('Noè', 'Emma'), ('Liam', 'Olivia'), ('Muratore', "Sofia"), ('Giacobbe', 'Isabella'), ('William', 'Ava'), ('Ethan', 'Mia'), ('Michael', "Emilio")]

Puoi leggere il file html usando la libreria urllib2 (vedi codice sotto).

Codice

import urllib2
risposta = urllib2.urlopen('')
html = risposta.leggi()

Note finali

In questo post, abbiamo discusso sull'espressione regolare, i metodi e i metacaratteri per formare un'espressione regolare. Abbiamo anche analizzato diversi esempi per vederne gli usi pratici.. Qui ho cercato di introdurti all'espressione regolare e di coprire i metodi più comuni per risolvere i problemi di massima espressione regolare.

Il post ti è stato utile?? Fateci sapere i vostri pensieri su questa guida nella sezione commenti qui sotto..

Se ti piace quello che hai appena letto e vuoi continuare a imparare l'analisi, iscriviti alle nostre email, Seguici su Twitter o come il nostro pagina Facebook.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.