Documentazione per il modulo Re per Python 3 in . Re modulo per le espressioni regolari

Le espressioni regolari sono una componente molto popolare di quasi tutti i linguaggi di programmazione. Ti aiutano ad accedere rapidamente alle informazioni di cui hai bisogno. In particolare, vengono utilizzati quando è necessario elaborare un testo. Python viene fornito con un modulo speciale per impostazione predefinita. re, che è responsabile dell'utilizzo delle espressioni regolari.

Oggi parleremo in dettaglio di cos'è in generale, come lavorare con loro e come funziona il modulo re aiuterà.

Espressioni regolari: introduzione

Quali sono gli usi delle espressioni regolari? Quasi tutto. Ad esempio, questi:

  1. Applicazioni Web che richiedono la convalida del testo. Un tipico esempio sono i client di posta online.
  2. Qualsiasi altro progetto relativo a testi, database e così via.

Prima di iniziare ad analizzare la sintassi, dovremmo comprendere più in dettaglio i principi di base del funzionamento della libreria re e in generale, ciò che è generalmente buono. Daremo anche esempi tratti dalla pratica reale, dove descriveremo il meccanismo del loro utilizzo. È possibile creare un tale modello, adatto per eseguire un'ampia varietà di operazioni con il testo.

Che cos'è un modello nella libreria Re?

Con esso, puoi cercare informazioni di vario tipo, ottenere informazioni ad esse corrispondenti, al fine di rendere più adattive altre funzioni. E, naturalmente, per elaborare questi dati.

Ad esempio, prendi il seguente modello: s+. Significa qualsiasi carattere di spazio. Se aggiungi un segno più, significa che il modello include più di uno spazio. Può anche abbinare i caratteri di tabulazione che vengono chiamati con t+.

Prima di utilizzarli, è necessario importare la libreria Re. Successivamente, utilizziamo un comando speciale per compilare il modello. Questo avviene in due fasi.

>>> importa re

>>> regex = re.compile('s+')

Nello specifico, questo codice esegue l'operazione di compilazione di un modello che può essere utilizzato. ad esempio, per cercare spazi (uno o più).

Ottenere informazioni separate da stringhe diverse usando espressioni regolari

Supponiamo di avere una variabile contenente le seguenti informazioni.

>>> testo = “””100 INF Informatica

213 MAT Matematica  

156 ITA inglese»»»

Contiene tre corsi di formazione. Ciascuno di essi è composto da tre parti: numero, codice e nome. Vediamo che l'intervallo tra queste parole è diverso. Cosa fare per spezzare questa riga in numeri e parole separati? Esistono due metodi per raggiungere questo obiettivo:

  1. chiama una funzione ri.dividere.
  2. applica la funzione dividere per regex.

Ecco un esempio di utilizzo della sintassi di ciascuno dei metodi per la nostra variabile.

>>> re.split('s+', testo)  

# o

>>> regex.split(testo)

Output: ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'English']

In generale, possono essere utilizzati entrambi i metodi. Ma in realtà è molto più semplice usare un'espressione regolare invece di usare la funzione più volte. ri.dividere.

Trovare corrispondenze con tre funzioni

Diciamo che dobbiamo estrarre solo numeri da una stringa. Cosa bisogna fare per questo?

re.trovall()

Ecco un caso d'uso per la funzione trova tutto(), che, insieme alle espressioni regolari, consente di estrarre le occorrenze di uno o più numeri da una variabile di testo.

>>> stampa(testo)  

100 Informatica INF

213 MAT Matematica  

156 ITA inglese

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(testo)  

['100', '213', '156']

Insieme al simbolo d, abbiamo utilizzato un modello che indica assolutamente qualsiasi valore numerico situato in una variabile o in un testo. E poiché abbiamo aggiunto uno + lì, significa che deve essere presente almeno un numero. 

È inoltre possibile utilizzare il segno * per specificare che la presenza di una cifra non è richiesta per trovare una corrispondenza.

Ma nel nostro caso, poiché abbiamo usato +, abbiamo estratto con trova tutto() 1 o più designazioni digitali di corsi dal testo. Pertanto, nel nostro caso, le espressioni regolari fungono da impostazioni per la funzione.

re.search() vs ri.match()

Come si può intuire dal nome delle funzioni, la prima ricerca una corrispondenza nel testo. Domanda: Qual è la differenza tra trova tutto? Il punto è che restituisce un oggetto specifico che corrisponde al modello e non l'intera sequenza di risultati trovati sotto forma di elenco, come la funzione precedente.

A sua volta, la funzione re.match fa lo stesso. Solo la sintassi è diversa. Il modello deve essere posizionato all'inizio. 

Prendiamo un esempio che lo dimostri.

>>> # crea una variabile con testo

>>> text2 = «»»INF Informatica

213 MAT Matematica 156″»»  

>>> # compila la regex e cerca i pattern

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> print('Primo indice: ', s.start())  

>>> print('Ultimo indice: ', s.end())  

>>> print(text2[s.start():s.end()]) 

Primo indice: 17 

Ultimo indice: 20

213

Se vuoi ottenere un risultato simile in un modo diverso, puoi usare la funzione gruppo().

Sostituzione di parte del testo con la libreria Re

Per sostituire il testo, utilizzare la funzione re.sub(). Supponiamo che il nostro elenco di corsi sia leggermente cambiato. Vediamo che dopo ogni valore digitale abbiamo una scheda. Il nostro compito è combinare tutta questa sequenza in una riga. Per fare ciò, dobbiamo sostituire l'espressione s+ di passare 

Il testo originale era:

# crea una variabile con testo

>>> testo = “””100 INF t Informatica

213 MAT t Matematica  

156 ITA t Inglese»»»  

>>> stampa(testo)  

100 INFO Informatica

213 MAT Matematica  

156 ITA Inglese

Per eseguire l'operazione desiderata, abbiamo utilizzato le seguenti righe di codice.

# sostituisci uno o più spazi con 1

>>> regex = re.compile('s+')  

>>> print(regex.sub(' ', testo))  

Di conseguenza, abbiamo una riga. 

101 Computer COM 205 Matematica MAT 189 ENG Inglese

Consideriamo ora un altro problema. Non siamo di fronte al compito di mettere spazi. Per noi è molto più importante che tutti i nomi dei corsi inizino su una nuova riga. Per fare ciò, viene utilizzata un'altra espressione che aggiunge una nuova riga all'eccezione. Che razza di espressione è questa?

Biblioteca Re supporta una funzionalità come la corrispondenza negativa. Si differenzia da quello diretto in quanto contiene un punto esclamativo prima della barra. Cioè, se dobbiamo saltare il carattere di nuova riga, allora dobbiamo scrivere !n invece di n.

Otteniamo il seguente codice.

# rimuovi tutti gli spazi tranne il ritorno a capo  

>>> regex = re.compile('((?!n)s+)')  

>>> print(regex.sub(' ', testo))  

100 Informatica INF

213 MAT Matematica  

156 ITA inglese

Cosa sono i gruppi di espressioni regolari?

Con l'aiuto di gruppi di espressioni regolari, possiamo ottenere gli oggetti desiderati sotto forma di elementi separati e non in una riga. 

Supponiamo di dover ottenere il numero, il codice e il nome del corso non in una riga, ma come elementi separati. Per completare l'attività, dovrai scrivere un numero enorme di righe di codice non necessarie. 

In effetti, il compito può essere notevolmente semplificato. Puoi compilare il modello per tutte le voci e specificare solo i dati che devi ottenere dalle parentesi.

Ci sarà un numero molto ridotto di linee. 

# crea gruppi di template di testo del corso ed estraili

>>> course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(modello_corso, testo)  

[('100', 'INF', 'Informatica'), ('213', 'MAT', 'Matematica'), ('156', 'ENG', 'Inglese')]

Il concetto di abbinamento “avido”.

Di norma, le espressioni regolari sono programmate per estrarre la quantità massima di dati corrispondenti. E anche se hai bisogno di molto meno.

Diamo un'occhiata a un codice HTML di esempio in cui dobbiamo ottenere il tag.

>>> text = "Esempio di corrispondenza di espressioni regolari avidi"  

>>> re.findall('', testo)  

['Esempio di corrispondenza di espressioni regolari avidi']

Invece di estrarre un solo tag, Python ha ottenuto l'intera stringa. Ecco perché è chiamato avido.

E cosa fare per ottenere solo il tag? In questo caso, è necessario utilizzare la corrispondenza pigra. Per specificare tale espressione, viene aggiunto un punto interrogativo alla fine del pattern.

Otterrai il codice seguente e l'output dell'interprete.

>>> re.findall('', testo)  

[”, “]

Se è necessario ottenere solo la prima occorrenza incontrata, viene utilizzato il metodo ricerca ().

re.search('', testo).group()  

"

Quindi verrà trovato solo il tag di apertura.

Modelli di espressioni popolari

Ecco una tabella contenente i modelli di espressioni regolari più comunemente usati.

Documentazione per il modulo Re per Python 3 in . Re modulo per le espressioni regolari

Conclusione

Abbiamo considerato solo i metodi più basilari per lavorare con le espressioni regolari. In ogni caso, hai visto quanto sono importanti. E qui non fa differenza se sia necessario analizzare l'intero testo o i suoi singoli frammenti, se sia necessario analizzare un post su un social network o raccogliere dati per elaborarlo successivamente. Le espressioni regolari sono un aiuto affidabile in questa materia.

Consentono di svolgere attività quali:

  1. Specificando il formato dei dati, come un indirizzo email o un numero di telefono.
  2. Ottenere una stringa e dividerla in più stringhe più piccole.
  3. Esegui varie operazioni con il testo, come la ricerca, l'estrazione delle informazioni necessarie o la sostituzione di parte dei caratteri.

Le espressioni regolari consentono anche di eseguire operazioni non banali. A prima vista, padroneggiare questa scienza non è facile. Ma in pratica tutto è standardizzato, quindi basta capirlo una volta, dopodiché questo strumento può essere utilizzato non solo in Python, ma anche in qualsiasi altro linguaggio di programmazione. Anche Excel utilizza espressioni regolari per automatizzare l'elaborazione dei dati. Quindi è un peccato non usare questo strumento.

Lascia un Commento