Espressioni regolari in Python [con esempi]: come implementare?

Pubblicato: 2021-01-29

Durante l'elaborazione di dati grezzi da qualsiasi fonte, è importante estrarre le informazioni corrette in modo da poter ottenere informazioni significative dai dati. A volte diventa difficile estrarre lo schema specifico dai dati, specialmente nel caso di dati testuali.

I dati testuali sono costituiti da paragrafi di informazioni raccolte tramite moduli di indagine, siti Web di rottamazione e altre fonti. Il Channing di diverse funzioni di accesso di stringhe con funzioni panda o altre funzioni personalizzate può portare a termine il lavoro, ma cosa succede se è necessario ottenere un modello più specifico? Le espressioni regolari fanno questo lavoro con facilità.

Sommario

Che cos'è un'espressione regolare (RegEx)?

Un'espressione regolare è una rappresentazione di un insieme di caratteri per le stringhe. Presenta una formula generalizzata per un modello particolare nelle stringhe che aiuta a separare le informazioni corrette dal pool di dati. L'espressione di solito è composta da simboli o caratteri che aiutano a formare la regola ma, a prima vista, può sembrare strana e difficile da afferrare. Questi simboli hanno significati associati che sono descritti qui.

Impara i corsi di scienza dei dati dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.

Metacaratteri in RegEx

  1. '.': è un carattere jolly, corrisponde a un singolo carattere (qualsiasi carattere, ma solo una volta)
  2. ^: indica l'inizio della stringa
  3. $: indica la fine della stringa
  4. [ ]: corrisponde a uno dei set di caratteri all'interno di [ ]
  5. [az]: corrisponde a uno degli intervalli di caratteri a,b,…,z
  6. [^abc] : corrisponde a un carattere che non è a,b o c.
  7. a|b: corrisponde a a o b, dove a e b sono stringhe
  8. () : fornisce l'ambito per gli operatori
  9. \ : abilita l'escape per i caratteri speciali (\t, \n, \b, \.)
  10. \b: corrisponde al limite della parola
  11. \d : qualsiasi cifra, equivalente a [0-9]
  12. \D: qualsiasi non cifra, equivalente a [^0-9]
  13. \s: qualsiasi spazio bianco, equivalente a [ \t\n\r\f\v]
  14. \S : qualsiasi spazio non vuoto, equivalente a [^\t\n\r\f\v]
  15. \w : qualsiasi alfanumerico, equivalente a [a-zA-Z0-9_]
  16. \W : qualsiasi non alfanumerico, equivalente a [^a-zA-Z0-9_]
  17. '*': corrisponde a zero o più occorrenze
  18. '+': corrisponde a una o più occorrenze
  19. '?': corrisponde a zero o a una occorrenza
  20. {n}: esattamente n ripetizioni, n>=0
  21. {n,}: almeno n ripetizioni
  22. {,n}: al massimo n ripetizioni
  23. {m,n}: almeno m ripetizioni e al massimo n ripetizioni

Esempi per comprendere la soluzione

Ora che sei a conoscenza dei caratteri che compongono una RegEx, vediamo come funziona:

1. Filtraggio e-mail:

Supponiamo di voler filtrare tutti gli ID e-mail da un lungo paragrafo. Il formato generale per un'e-mail è:

nome utente@nome_dominio. <dominio_di_primo_livello>

Il nome utente può essere alfanumerico e, quindi, possiamo usare \w per denotarli, ma esiste la possibilità che l'utente crei un account come nome.cognome. Per affrontare questo, sfuggiremo al punto e creeremo una serie di personaggi. Successivamente, nome_dominio dovrebbe essere solo alfabetico e quindi A-Za-z lo indicherà. Il dominio di primo livello è solitamente .com, .in, .org ma, a seconda del caso d'uso, puoi scegliere l'intero intervallo alfabetico o filtrare domini specifici.

L'espressione regolare di questo sarà simile a questa:

^([a-zA-Z0-9_.]+)@([a-zA-Z0-9-]+)\.([a-zA-Z]{2,4})$

Qui vengono dichiarati anche l'inizio e la fine del pattern e il dominio di primo livello può contenere solo 2-4 caratteri. L'intera espressione ha 3 gruppi.

2. Filtraggio delle date:

Le informazioni testuali che stai estraendo potrebbero contenere le date e nessuna colonna separata è resa disponibile per te. Le date sono un fattore essenziale che aiuta nel filtraggio dei dati o nell'analisi delle serie temporali. Una data particolare assume il formato data/mese/anno, in cui data e mese possono scambiarsi.

Inoltre, i mesi possono essere numerici così come alfabeti e in alfabeti abbreviazioni o nomi completi. Dipende principalmente da quanti casi sono presenti nei nostri dati e possono essere raggiunti solo con successo e prova.

Di seguito è mostrato un semplice RegEx che copre una varietà di date:

^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$

Questo modello acquisisce il formato della data con un trattino o una barra. La data e il mese sono limitati a una o due cifre e l'anno fino a quattro0 cifre. Le rispettive entità vengono acquisite come gruppi che in questo caso sono facoltativi.

Leggi anche: Idee e argomenti del progetto Python

Come implementarlo in Python?

Le espressioni regolari che abbiamo appena creato soddisfano i rispettivi criteri che abbiamo ipotizzato e ora è il momento di implementarle nel codice Python. Python ha un modulo integrato chiamato re module che implementa il funzionamento di queste espressioni. Semplicemente,

importare ri

modello = '^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$'

Il modulo Re offre un'ampia gamma di funzioni e tutte hanno casi d'uso diversi. Diamo un'occhiata ad alcune delle funzioni importanti:

  1. re.findall(): questa funzione restituisce l'elenco di tutte le corrispondenze nella stringa di test in base al modello superato. Considera questo esempio:

string = '25-12-1999 testo casuale qui 25/12/1999'

print(re.findall(modello, stringa))

Restituirà solo le date dalla stringa in un elenco.

  1. re.sub(): Sub in questa funzione sta per sostituzione e fa la stessa cosa. Sostituisce i fiammiferi con il valore di sostituzione fornito. La funzione accetta il modello, la stringa, il valore di sostituzione e il parametro facoltativo del conteggio. Il parametro count controlla quante occorrenze si desidera sostituire. Per impostazione predefinita, li sostituisce tutti e restituisce la nuova stringa.
  2. re.split(): divide la stringa nei siti corrispondenti e restituisce le parti come stringhe separate in un elenco.
  3. re.search(): questa funzione restituisce l'oggetto match che contiene la corrispondenza trovata nella stringa insieme a tutti i gruppi catturati. Può tornare utile quando desideri archiviare questi gruppi come colonne separate.

Per eseguire questo:

corrispondenza = re.search(modello, stringa)

gruppo.partita(1)

Gruppo(0) restituisce l'intera corrispondenza e i numeri successivi corrispondenti denotano altri gruppi.

Checkout: stipendio per sviluppatori Python in India

Conclusione

Le espressioni regolari sono un modo efficace per acquisire modelli nei dati testuali. Potrebbe volerci un po' di sforzo in più per mantenere il comando dei vari personaggi, ma semplifica il processo di estrazione dei dati in casi d'uso complessi.

Fornisci alcuni esempi di espressioni regolari in Python.

I seguenti esempi illustrano il funzionamento o le espressioni regolari in Python:
un. Filtraggio e-mail
Le espressioni regolari possono essere utilizzate in modo efficiente per filtrare le email. La sintassi normale per il filtraggio delle email è - ^((a-zA-Z0-9_.)+)@((a-zA-Z0-9-)+).((a-zA-Z){2,4} )$
Questa espressione è divisa in tre gruppi e affronta molti casi, inclusi - quando il nome utente è alfanumerico e quando ha un punto, ad esempio “first.last@”. Questa espressione verrà utilizzata per i domini principali che contengono 2-4 caratteri.
B. Filtraggio date
Le date possono essere un fattore cruciale durante la gestione del filtraggio dei dati. I dati testuali con cui hai a che fare spesso contengono date. L'espressione regolare o RegEx che estrae i dati da un testo normale è - ^(d{1,2})(/-)(d{1,2})(/-)(d{2,4})$
La data e il mese possono essere fino a 2 cifre mentre il mese può essere fino a 4 cifre.

Quali sono le funzioni coinvolte nell'implementazione delle espressioni regolari in Python?

Le seguenti funzioni sono coinvolte nell'implementazione delle espressioni regolari in Python:
1. re.findall() - Questa funzione accetta un modello che deve essere abbinato alla stringa di testo. Restituisce le stringhe che corrispondono.
2. re.sub() - Sub in “re.sub” sta per “sostituzione”. Questo metodo esegue esattamente la stessa funzione della funzione "re.findall()".
3. re.split() - Separa le stringhe attorno al separatore che deve essere passato come parametro. Il separatore potrebbe essere qualsiasi cosa.
4. re.search() - Questa funzione restituisce la corrispondenza trovata nella stringa insieme ad altri gruppi di stringhe che ha catturato.

Quali sono alcune sequenze speciali utilizzate nelle espressioni regolari?

Di seguito sono elencate alcune delle sequenze speciali utilizzate nelle espressioni regolari:
1. A: Controlla se la stringa inizia con il carattere specificato.
2. (Barra in avanti) b: controlla se la stringa inizia o finisce con il carattere specificato. (stringa)/b controlla l'inizio mentre (barra all'indietro) b (stringa) controlla la fine.
3. B: È esattamente opposto al b. Verifica se la stringa non inizia con il carattere specificato.
4. d: verifica i valori numerici nella stringa.
5. D: verifica la presenza di valori o caratteri non numerici.
6. s: verifica la presenza di spazi vuoti.
7. S: verifica la presenza di qualsiasi carattere non di spazio vuoto.
8. w: verifica la presenza di qualsiasi carattere alfanumerico.
9. W: verifica la presenza di caratteri non alfanumerici.