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 Testing è 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 = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
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 = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
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.

Sommario

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()
  • Altri 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
  • vario Python i flag utilizzati nei metodi Regex sono re.M, re.I, re.S, ecc.

Per saperne di più leggi di più