Espressioni regolari in Python

Ti sei mai chiesto quale sia la chiave scoperta del testo in un documento, o assicurandosi che un testo conforme in alcuni formati, ad esempio un indirizzo di posta elettronica e altre operazioni simili?

La chiave per tali operazioni è l'espressione regolare (regex). Vediamo alcune definizioni per le espressioni regolari. In Wikipedia, regex è definito come segue:

Una sequenza di caratteri che definisce un modello di ricerca, principalmente per l'uso nella corrispondenza di modelli con stringhe o corrispondenza di stringhe, cioè operazioni "Trova e sostituisci". Il concetto nacque negli anni '50, quando il matematico americano Stephen Kleene formalizzò la descrizione di un linguaggio regolare, e divenne di uso comune con le utility di elaborazione testi Unix ed, un editor e grep, un filtro.

Un'altra bella definizione di regular-expressions.info è:

Un'espressione regolare (regex o regexp in breve) è una stringa di testo speciale per descrivere un modello di ricerca. Puoi pensare alle espressioni regolari come caratteri jolly sugli steroidi. Probabilmente hai familiarità con le notazioni dei caratteri jolly come * .txt per trovare tutti i file di testo in un gestore di file. L'equivalente regex è. * \. Txt $

So che il concetto di espressioni regolari può sembrare ancora un po 'vago. Quindi, diamo un'occhiata ad alcuni esempi di regex per capire meglio il concetto.

Esempi di espressioni regolari

In questa sezione, ti mostrerò alcuni esempi di regex per aiutarti a capire meglio il concetto.

Dì che hai questa espressione regolare:

/ Abder /

Questo ci sta semplicemente dicendo di abbinare la parola Abder solo.

Che dire di questa regex?

/ A [nr] t /

Puoi leggere questo regex come segue: trova un modello di testo tale che sia la prima lettera un e l'ultima lettera è t, e tra quelle lettere arriva o n o r. Quindi le parole corrispondenti sono formica e arte.

Lascia che ti dia un piccolo quiz a questo punto. Come scriveresti un'espressione regolare che inizia con circa, e termina con uno o tutti i seguenti caratteri TBR? Sì, questa espressione regolare può essere scritta come segue:

/ Ca [TBR] /

Se vedi un'espressione regolare che inizia con un accento circonflesso ^, questo significa che corrisponde alla stringa che inizia con la stringa menzionata in seguito ^. Quindi, se hai avuto la regex di seguito, corrisponde alla stringa che inizia con Questo.

/ ^ Questo /

Quindi, nella seguente stringa:

Il mio nome è Abder This is Abder This is Tom

Basato sulla regex / ^ Questo /, le seguenti stringhe saranno abbinate:

Questo è Abder Questo è Tom

Cosa succede se volessimo abbinare una stringa che estremità con una corda? In questo caso, usiamo il simbolo del dollaro $. Ecco un esempio:

Abder $

Pertanto, nella stringa precedente (le tre linee), i seguenti modelli sarebbero stati abbinati usando questa espressione regolare:

Il mio nome è Abder This is Abder

Bene, cosa ne pensi di questa regex?

^ [A-Z] [a-z]

So che potrebbe sembrare complesso a prima vista, ma esaminiamolo pezzo per pezzo.

Abbiamo già visto che accento circonflesso ^ è. Significa abbinare una stringa che inizia con una stringa. [A-Z] si riferisce alle lettere maiuscole. Quindi, se leggiamo questa parte della regex: ^ [A-Z], ci sta dicendo di abbinare la stringa che inizia con una lettera maiuscola. L'ultima parte, [A-z], significa che dopo aver trovato una stringa che inizia con una lettera maiuscola, sarà seguita da lettere minuscole dall'alfabeto.

Quindi, quale delle seguenti stringhe sarà abbinata usando questa regex? Se non sei sicuro, puoi usare Python come vedremo nella prossima sezione per testare la tua risposta.

abder Abder ABDER ABDER

Le espressioni regolari sono un argomento molto ampio, e questi esempi servono solo a dare un'idea di cosa sono e perché li usiamo. 

Un bel riferimento per saperne di più sulle espressioni regolari e vedere più esempi è RexEgg.

Espressioni regolari in Python

Veniamo ora alla parte divertente. Vogliamo vedere come lavorare con alcune delle espressioni regolari di cui sopra in Python. Il modulo che useremo per lavorare con le espressioni regolari in Python è il ri modulo.

Il primo esempio è stato trovare la parola Abder. In Python, faremmo come segue:

import re text = 'Il mio nome è Abder' match_pattern = re.match (r'Abder ', testo) stampa match_pattern

Se esegui lo script Python sopra riportato, otterrai l'output: Nessuna!

Lo script funziona bene, ma il problema riguarda la funzione incontro() lavori. Se torniamo al ri documentazione del modulo, questa è la funzione incontro() fa:

Se zero o più caratteri all'inizio della stringa corrispondono al modello di espressione regolare, restituisce un oggetto corrispondente corrispondente. Restituisce None se la stringa non corrisponde al pattern; si noti che questo è diverso da una corrispondenza di lunghezza zero.

Aha, da questo possiamo vederlo incontro() restituirà un risultato solo se ha trovato una corrispondenza al inizio della stringa.

Possiamo invece usare la funzione ricerca(), che è, basato sulla documentazione:

Analizza la stringa cercando la prima posizione in cui il modello di espressioni regolari produce una corrispondenza e restituisce un oggetto di corrispondenza corrispondente. Restituisce None se nessuna posizione nella stringa corrisponde al pattern; si noti che questo è diverso dal trovare una corrispondenza di lunghezza zero in qualche punto della stringa.

Quindi, se scriviamo lo script sopra, ma con ricerca() invece di incontro(), otteniamo il seguente risultato:

<_sre.SRE_Match object at 0x101cfc988>

Cioè un abbinare oggetto è stato restituito.

Se vogliamo restituire il risultato (stringa di corrispondenza), usiamo il gruppo() funzione. Se vogliamo vedere l'intera partita, usiamo gruppo (0). Così:

stampa match_pattern.group (0)

restituirà l'output: Abder.

Se prendiamo la seconda regex nella sezione precedente, cioè / A [nr] t /, può essere scritto in Python come segue:

import re text = 'Questa è una formica nera' match_pattern = re.search (r'a [nr] t ', text) stampa match_pattern.group (0)

L'output per questo script è: formica.

Conclusione

L'articolo si allunga e l'argomento delle espressioni regolari in Python richiede sicuramente più di un articolo, se non un libro da solo. 

Questo articolo, tuttavia, è per darti un rapido avvio e sicurezza per entrare nel mondo delle espressioni regolari in Python. È possibile fare riferimento a ri documentazione per saperne di più su questo modulo e su come approfondire l'argomento.