Python RegEx: re.match(), re.search(), re.findall() con Esempio

In cosa consiste l'espressione regolare Python?

A Espressione regolare (RE) in un linguaggio di programmazione รจ una stringa di testo speciale utilizzata per descrivere un modello di ricerca. รˆ estremamente utile per estrarre informazioni da testo come codice, file, registro, fogli di calcolo o persino documenti.

Durante l'utilizzo di Python La prima cosa da riconoscere nell'espressione regolare รจ che tutto รจ essenzialmente un carattere e stiamo scrivendo modelli per corrispondere a una sequenza specifica di caratteri denominata anche stringa. Le lettere Ascii o latine sono quelle che si trovano sulle tue tastiere e Unicode viene utilizzato per abbinare il testo straniero. Include cifre, segni di punteggiatura e tutti i caratteri speciali come $#@!%, ecc.

Ad esempio, a Python l'espressione regolare potrebbe dire a un programma di cercare un testo specifico nella stringa e quindi di stampare il risultato di conseguenza. L'espressione puรฒ includere

  • Corrispondenza del testo
  • Ripetizione
  • ramificazione
  • Composizione del modello ecc.

Espressione regolare o RegEx in Python รจ indicato come RE (RE, regex o pattern regex) tramite cui vengono importate re modulo. Python supporta l'espressione regolare attraverso le librerie. RegEx in Python supporta varie cose come Modificatori, identificatori e caratteri di spazio bianco.

Identificatori modificatori Caratteri dello spazio bianco Fuga necessaria
\d= qualsiasi numero (una cifra) \d rappresenta una cifra. Esempio: \d{1,5} dichiarerร  una cifra compresa tra 1,5 come 424,444,545 ecc. \n = nuova riga . + * ? [] $ ^ () {} | \
\D= tutto tranne un numero (una non-cifra) + = corrisponde a 1 o piรน \s= spazio
\s = spazio
(tabulazione, spazio, nuova riga ecc.)
? = corrisponde a 0 o 1 \t =tab
\S= tutto tranne uno spazio * = 0 o piรน \e = fuga
\w = lettere (corrisponde a caratteri alfanumerici, incluso "_") $ corrisponde alla fine di una stringa \r = ritorno a capo
\W =tutto tranne lettere (corrisponde a un carattere non alfanumerico escluso "_") ^ corrisponde all'inizio di una stringa \f= avanzamento modulo
. = tutto tranne le lettere (punti) | corrisponde a o x/y ------
\b = qualsiasi carattere tranne la nuova riga [] = intervallo o โ€œvarianzaโ€ ------
\. {x} = questa quantitร  di codice precedente ------

Sintassi delle espressioni regolari (RE).

import re
  • Modulo โ€œreโ€ incluso con Python utilizzato principalmente per la ricerca e la manipolazione di stringhe
  • Utilizzato frequentemente anche per la pagina web โ€œraschiatura" (estrarre grandi quantitร  di dati dai siti Web)

Inizieremo il tutorial sulle espressioni con questo semplice esercizio utilizzando le espressioni (w+) e (^).

Esempio di espressione w+ e ^

  • โ€œ^โ€: Questa espressione corrisponde all'inizio di una stringa
  • โ€œw+โ€œ: Questa espressione corrisponde al carattere alfanumerico nella stringa

Qui vedremo a Python RegEx Esempio di come possiamo usare l'espressione w+ e ^ nel nostro codice. Copriamo la funzione re.findall() in Python, piรน avanti in questo tutorial, ma per un po' ci concentreremo semplicemente sulle espressioni \w+ e \^.

Ad esempio, per la nostra stringa "guru99, l'istruzione รจ divertente" se eseguiamo il codice con w+ e^, verrร  restituito "guru99".

Esempio di espressione w+ e ^

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print(r1)

Ricorda, se rimuovi +segno da w+, l'output cambierร  e fornirร  solo il primo carattere della prima lettera, ovvero [g]

Esempio di espressione \s nella funzione re.split

  • โ€œsโ€: questa espressione viene utilizzata per creare uno spazio nella stringa

Per capire come funziona questa RegEx Python funziona, iniziamo con un semplice Python RegEx Esempio di funzione divisa. Nell'esempio, abbiamo diviso ogni parola utilizzando la funzione โ€œre.splitโ€ e allo stesso tempo abbiamo utilizzato l'espressione \s che consente di analizzare separatamente ogni parola nella stringa.

\s espressione nella funzione re.split

Quando esegui questo codice ti darร  l'output ['noi', 'siamo', 'splitting', 'the', 'words'].

Ora vediamo cosa succede se rimuovi "\" da s. Non c'รจ l'alfabeto 's' nell'output, questo perchรฉ abbiamo rimosso '\' dalla stringa e valuta la "s" come un carattere regolare e quindi divide le parole ovunque trovi "s" nella stringa.

\s espressione nella funzione re.split

Allo stesso modo, ci sono serie di altri Python espressione regolare che puoi utilizzare in vari modi Python come \d,\D,$,\.,\b, ecc.

Ecco il codice completo

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print((re.split(r'\s','we are splitting the words')))
print((re.split(r's','split the words')))

Successivamente, vedremo i tipi di metodi utilizzati con le espressioni regolari in Python.

Utilizzo dei metodi delle espressioni regolari

Il pacchetto "re" fornisce diversi metodi per eseguire effettivamente query su una stringa di input. Vedremo le modalitร  di re in Python:

  • ri.match()
  • ricerca()
  • re.trovall()

Note:: In base alle espressioni regolari, Python offre due diverse operazioni primitive. Il metodo match verifica la corrispondenza solo all'inizio della stringa, mentre search verifica la corrispondenza in qualsiasi punto della stringa.

ri.match()

ri.match() funzione di re-in Python cercherร  il modello di espressione regolare e restituirร  la prima occorrenza. IL Python Il metodo RegEx Match verifica la corrispondenza solo all'inizio della stringa. Pertanto, se viene trovata una corrispondenza nella prima riga, restituisce l'oggetto corrispondenza. Ma se viene trovata una corrispondenza in qualche altra riga, il file Python La funzione RegEx Match restituisce null.

Ad esempio, si consideri il seguente codice di Python funzione re.match(). L'espressione "w+" e "\W" corrisponderร  alle parole che iniziano con la lettera "g" e successivamente tutto ciรฒ che non inizia con "g" non verrร  identificato. Per verificare la corrispondenza di ciascun elemento nell'elenco o nella stringa, eseguiamo il forloop in this Python re.match() Esempio.

ri.match()

re.search(): ricerca di pattern nel testo

ricerca() la funzione cercherร  il modello di espressione regolare e restituirร  la prima occorrenza. A differenza di Python re.match(), controllerร  tutte le righe della stringa di input. IL Python La funzione re.search() restituisce un oggetto di corrispondenza quando viene trovato il modello e "null" se il modello non viene trovato

Come utilizzare la ricerca()?

Per utilizzare la funzione search(), รจ necessario importare Python re modulo prima e poi eseguire il codice. IL Python La funzione re.search() prende il โ€œmodelloโ€ e il โ€œtestoโ€ da scansionare dalla nostra stringa principale

usa la ricerca()

Ad esempio qui cerchiamo due stringhe letterali โ€œSoftware testingโ€ โ€œguru99โ€, in una stringa di testo โ€œSoftware Collaudo รจ divertenteโ€. Per "test del software" abbiamo trovato la corrispondenza, quindi restituisce l'output di Python re.search() Esempio come "trovata corrispondenza", mentre per la parola "guru99" non รจ stato possibile trovare la stringa, quindi restituisce l'output come "Nessuna corrispondenza".

re.trovall()

trova tutto() Il modulo viene utilizzato per cercare "tutte" le occorrenze che corrispondono a un determinato modello. Al contrario, il modulo search() restituirร  solo la prima occorrenza che corrisponde al modello specificato. findall() ripeterร  tutte le righe del file e restituirร  tutte le corrispondenze di pattern non sovrapposte in un unico passaggio.

Come utilizzare re.findall() in Python?

Qui abbiamo un elenco di indirizzi e-mail e vogliamo che tutti gli indirizzi e-mail vengano recuperati dall'elenco, utilizziamo il metodo re.findall() in PythonTroverร  tutti gli indirizzi e-mail dall'elenco.

 Utilizzare re.findall() in Python

Ecco il codice completo per l'esempio di re.findall()

import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print((z.groups()))
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ')
    if re.search(pattern, text):
        print('found a match!')
else:
    print('no match')
abc = '[email protected], [email protected], [email protected]'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print(email)

Python Bandiere

Molti Python I metodi Regex e le funzioni Regex accettano un argomento opzionale chiamato Flags. Questi flag possono modificare il significato del dato Python Modello regex. Per capirli vedremo uno o due esempi di queste bandiere.

Varie bandiere utilizzate Python inclusi

Sintassi per i flag Regex Cosa fa questa bandiera?
[re.M] Fai in modo che l'inizio/fine consideri ogni riga
[ri.I] Ignora il caso
[ri.S] Fare [ . ]
[re.U] Make { \w,\W,\b,\B} segue le regole Unicode
[re.L] Fai in modo che {\w,\W,\b,\B} segua la locale
[ri.X] Consenti commento in Regex

Esempio di re.M o flag multilinea

In multiline il carattere di pattern [^] corrisponde al primo carattere della stringa e all'inizio di ogni riga (immediatamente dopo ogni nuova riga). Mentre l'espressione small โ€œwโ€ viene utilizzata per contrassegnare lo spazio con caratteri. Quando esegui il codice la prima variabile โ€œk1โ€ stampa solo il carattere 'g' per la parola guru99, mentre quando aggiungi il flag multiline, recupera i primi caratteri di tutti gli elementi nella stringa.

Esempio di re.M o flag multilinea

Ecco il codice

import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print(k1)
print(k2)
  • Abbiamo dichiarato la variabile xx per la stringa "guru99โ€ฆ. careerguru99โ€ฆ.selenioโ€
  • Esegui il codice senza utilizzare flag multilinea, fornisce l'output solo "g" dalle righe
  • Esegui il codice con il flag "multiline", quando stampi 'k2' restituisce l'output come 'g', 'c' e 's'
  • Quindi, la differenza che possiamo vedere dopo e prima dell'aggiunta di piรน righe nell'esempio sopra.

Allo stesso modo, puoi anche utilizzare altri Python flag come re.U (Unicode), re.L (Segui locale), re.X (Consenti commento), ecc.

Python 2 Esempio

I codici sopra riportati sono Python 3 esempi, se vuoi correre Python 2 Si prega di considerare il seguente codice.

# Example of w+ and ^ Expression
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print r1

# Example of \s expression in re.split function
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print (re.split(r'\s','we are splitting the words'))
print (re.split(r's','split the words'))

# Using re.findall for text
import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print(z.groups())
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print 'Looking for "%s" in "%s" ->' % (pattern, text),
    if re.search(pattern, text):
        print 'found a match!'
else:
    print 'no match'
abc = '[email protected], [email protected], [email protected]'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print email

# Example of re.M or Multiline Flags
import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print k1
print k2

Verifica il tuo Python Articoli tecnici

1. Quale metodo viene utilizzato per trovare tutte le occorrenze di un pattern in una stringa?

  • ricerca()
  • ri.match()
  • re.trovall()
  • re.dividi()
re.findall() viene utilizzato per trovare tutte le occorrenze di un pattern in una stringa.

2. Cosa rappresenta la classe di caratteri \d nelle espressioni regolari?

  • Qualsiasi cifra (0-9)
  • Qualsiasi carattere non numerico
  • Qualsiasi carattere di spazio vuoto
  • Qualsiasi lettera o numero
\d rappresenta qualsiasi cifra (0-9).

3. Quale funzione useresti per dividere una stringa in base agli spazi?

  • re.split(r'\s', stringa)
  • re.findall(r'\w+', stringa)
  • re.match(r'\s+', stringa)
  • re.split(r'\w+', stringa)
re.split(r'\s', string) divide una stringa in base agli spazi utilizzando l'espressione \s.

4. Qual รจ la differenza principale tra re.match() e re.search()?

  • re.match() cerca un pattern all'inizio di una stringa, mentre re.search() cerca un pattern in qualsiasi punto della stringa.
  • re.match() restituisce tutte le corrispondenze, mentre re.search() restituisce la prima corrispondenza.
  • re.search() รจ piรน veloce di re.match().
  • Entrambe le funzioni si comportano allo stesso modo.
re.match() cerca un pattern all'inizio di una stringa, mentre re.search() cerca un pattern in qualsiasi punto della stringa.

Sintesi

Un'espressione regolare in a linguaggio di programmazione รจ una stringa di testo speciale utilizzata per descrivere un modello di ricerca. Include cifre, segni di punteggiatura e tutti i caratteri speciali come $#@!%, ecc. L'espressione puรฒ includere valori letterali

  • Corrispondenza del testo
  • Ripetizione
  • ramificazione
  • Composizione del modello ecc.

In Python, un'espressione regolare รจ indicata come RE (RE, espressioni regolari o pattern regex) sono incorporati attraverso Python re modulo.

  • Modulo โ€œreโ€ incluso con Python utilizzato principalmente per la ricerca e la manipolazione di stringhe
  • Utilizzato frequentemente anche per lo โ€œscrapingโ€ di pagine web (estrarre grandi quantitร  di dati dai siti web)
  • I metodi di espressione regolare includono re.match(),re.search()& re.findall()
  • Altro Python I metodi di sostituzione RegEx sono sub() e subn() che vengono utilizzati per sostituire le stringhe corrispondenti in re
  • Python Bandiere Molti Python I metodi Regex e le funzioni Regex accettano un argomento opzionale chiamato Flags
  • Questi flag possono modificare il significato del modello Regex specificato
  • Various Python i flag utilizzati nei metodi Regex sono re.M, re.I, re.S, ecc.

Riassumi questo post con: