Documentazione per u modulu Re per Python 3 in . Re modulu per l'espressioni regulare

L'espressioni regulari sò un cumpunente assai populari di quasi ogni lingua di prugrammazione. Vi aiutanu à accede rapidamente à l'infurmazioni chì avete bisognu. In particulare, sò usati quandu hè necessariu di processà u testu. Python vene cun un modulu speciale per difettu. re, chì hè rispunsevuli di travaglià cù l'espressioni regulare.

Oghje parlemu in dettu ciò chì hè in generale, cumu travaglià cun elli è cumu u modulu re aiutarà.

Espressioni rigulari: una introduzione

Chì sò l'usi di l'espressioni regulare ? Quasi tutti. Per esempiu, questi:

  1. Applicazioni Web chì necessitanu validazione di testu. Un esempiu tipicu hè i clienti di mail online.
  2. Ogni altri prughjetti ligati à testi, basa di dati è cusì.

Prima di principià à analizà a sintassi, duvemu capisce in più dettagliu i principii basi di u funziunamentu di a biblioteca. re è in generale, ciò chì hè in generale bè. Avemu da ancu esempi da a pratica reale, induve avemu da descriverà u miccanisimu di u so usu. Pudete creà un tali mudellu, adattatu per voi per fà una larga varietà di operazioni cù u testu.

Chì ghjè un mudellu in a biblioteca Re?

Cù ellu, pudete circà l'infurmazioni di varii tipi, uttene l'infurmazioni currispundenti à elli, per fà altre funzioni più adattive. E, sicuru, per trattà sta dati.

Per esempiu, pigliate u seguente mudellu: s+. Significa ogni caratteru spaziale. Se aghjunghje un signu plus à questu, questu significa chì u mudellu include più di un spaziu. Puderà ancu currisponde à i caratteri di tabulazione chì sò chjamati t+.

Prima di aduprà, avete bisognu di impurtà a biblioteca Re. Dopu quì, usemu un cumandamentu speciale per cumpilà u mudellu. Questu hè fattu in dui passi.

>>> impurtà re

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

In particulare, stu codice esegue l'operazione di cumpilà un mudellu chì pò esse usatu. per esempiu, per circà spazii (unu o più).

Ottene infurmazione separata da diverse stringhe usendu espressioni regulari

Supponi chì avemu una variàbile chì cuntene l'infurmazioni seguenti.

>>> testu = """100 INF Informatica

213 MAT Matematica  

156 ENG English»»»

Contene trè corsi di furmazione. Ognunu di elli hè custituitu di trè parti - numeru, codice è nome. Avemu vistu chì l'intervallu trà queste parolle hè diversu. Cosa da fà per rompe sta linea in numeri è parolle separati? Ci hè dui metudi per ottene stu scopu:

  1. chjama una funzione ri.split.
  2. applicà a funzione Split di regex.

Eccu un esempiu di utilizà a sintassi di ognunu di i metudi per a nostra variàbile.

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

# o

>>> regex.split (testu)

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

In generale, i dui metudi ponu esse usatu. Ma in realtà hè assai più faciule d'utilizà una espressione regulare invece di utilizà a funzione parechje volte. ri.split.

Truvà partiti cù trè funzioni

Diciamu chì avemu bisognu di estrae solu numeri da una stringa. Chì ci vole à fà per questu?

ritruvà ()

Eccu un casu d'usu per a funzione findall (), chì, inseme cù l'espressioni rigulari, permette di estrae l'occurrence di unu o più numeri da una variabile di testu.

>>> stampa (testu)  

100 INF Informatica

213 MAT Matematica  

156 ITA Inglese

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

>>> regex_num.findall (testu)  

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

Inseme cù u simbulu d, avemu usatu un mudellu chì indica assolutamente ogni valore numericu situatu in una variàbile o testu. E postu chì avemu aghjustatu unu + quì, questu significa chì almenu un numeru deve esse presente. 

Pudete ancu aduprà u segnu * per specificà chì a prisenza di un cifru ùn hè micca necessariu per truvà un match.

Ma in u nostru casu, postu chì avemu usatu +, avemu estratti cun findall () 1 o più designazioni digitale di corsi da u testu. Cusì, in u nostru casu, l'espressioni regulari agiscenu cum'è paràmetri per a funzione.

ricerca () vs re.match()

Comu pudete guessà da u nome di e funzioni, i primi cercanu un match in u testu. Quistione: Chì hè a diffarenza trà truvallu? U puntu hè chì torna un ughjettu specificu chì currisponde à u mudellu, è micca a sequenza sana di risultati truvati in forma di lista, cum'è a funzione precedente.

In turnu, a funzione re.match faci u listessu. Solu a sintassi hè diversa. U mudellu deve esse postu à u principiu. 

Pigliemu un esempiu chì mostra questu.

>>> # crea una variabile cù testu

>>> text2 = «»»INF Informatica

213 MAT Matematica 156″»»  

>>> # compilate regex è cercate mudelli

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

>>> s = regex_num.search (text2)  

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

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

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

Primu indice: 17 

Dernier indice : 20

213

Se vulete ottene un risultatu simili in una manera diversa, pudete aduprà a funzione gruppu ().

Sustituisce una parte di testu cù a biblioteca Re

Per rimpiazzà u testu, utilizate a funzione re.sub(). Supponete chì a nostra lista di corsi hà cambiatu un pocu. Avemu vistu chì dopu ogni valore digitale avemu una tabulazione. U nostru compitu hè di cunghjuntà tutta sta sequenza in una linea. Per fà questu, avemu bisognu di rimpiazzà l'espressione s+ passà 

U testu originale era:

# crea una variabile cù u testu

>>> testu = """100 INF t Informatica

213 MAT t Math  

156 ENG t English»»»  

>>> stampa (testu)  

100 INFO Urdinatore

213 MAT matematica  

156 ENG inglese

Per fà l'operazione desiderata, avemu usatu e seguenti linee di codice.

# rimpiazzà unu o più spazii cù 1

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

>>> stampa (regex.sub(' ', testu))  

In u risultatu, avemu una linea. 

101 COM Computers 205 MAT Matematica 189 ENG Inglese

Avà cunzidira un altru prublema. Ùn simu micca di fronte à u compitu di mette spazii. Hè assai più impurtante per noi chì tutti i nomi di i corsi cumincianu à una nova linea. Per fà questu, una altra espressione hè aduprata chì aghjunghje una nova linea à l'eccezzioni. Chì tipu d'espressione hè questu?

Library Re supporta una funzione cum'è a corrispondenza negativa. Differisce da u direttu chì cuntene un puntu d'esclamazione prima di u slash. Questu hè, s'ellu ci vole à saltà u caratteru di novu linea, allora avemu bisognu di scrive !n invece di n.

Avemu u seguente codice.

# sguassate tutti i spazii fora di a nova linea  

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

>>> stampa (regex.sub(' ', testu))  

100 INF Informatica

213 MAT Matematica  

156 ITA Inglese

Chì sò i gruppi di spressione regulare?

Cù l'aiutu di gruppi di espressioni regulari, pudemu avè l'uggetti desiderati in forma di elementi separati, è micca in una linea. 

Suppone chì avemu bisognu di ottene u numeru di corsu, u codice è u nome micca in una linea, ma cum'è elementi separati. À compie u compitu, vi tuccherà à scrive un gran numaru di linii inutili di codice. 

In fatti, u compitu pò esse simplificatu assai. Pudete cumpilà u mudellu per tutte e voci è solu specificà i dati chì avete bisognu di ottene da i parentesi.

Ci sarà un picculu numeru di linii. 

# Crea gruppi di mudelli di testu di corsu è estrae

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

>>> re.findall (modulu di corsu, testu)  

[('100', 'INF', 'Computer Science'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'English')]

U cuncettu di "greedy" matching

Per standard, l'espressioni regulari sò programati per estrarà a quantità massima di dati currispondenti. E ancu s'ellu avete bisognu di menu.

Fighjemu un codice HTML di mostra induve avemu bisognu di ottene u tag.

>>> text = "Esempiu di Corrispondenza di Espressione Regular Greedy"  

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

['Esempiu di Corrispondenza di Espressione Regular Greedy']

Invece d'estrattà una sola tag, Python hà pigliatu a stringa sana. Hè per quessa ch'ella hè chjamata greedy.

È chì fà per piglià solu l'etichetta? In questu casu, avete bisognu di utilizà un matching lazy. Per specificà una tale espressione, un puntu d'interrogazione hè aghjuntu à a fine di u mudellu.

Truverete u codice seguente è l'output di l'interprete.

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

[”, ”]

S'ellu hè necessariu di ottene solu u primu scontru, u metudu hè utilizatu cerca ().

ricerca ('', testu).gruppu ()  

"

Allora solu u tag di apertura serà trovu.

Modelli d'espressione populari

Eccu una tavula chì cuntene i mudelli di spressione regulare più cumunimenti usati.

Documentazione per u modulu Re per Python 3 in . Re modulu per l'espressioni regulare

cunchiusioni

Avemu cunsideratu solu i metudi più basi per travaglià cù l'espressioni regulare. In ogni casu, avete vistu quantu sò impurtanti. È quì ùn hè micca diffarenza s'ellu hè necessariu analizà u testu sanu o i so frammenti individuali, s'ellu hè necessariu analizà un postu in una reta soziale o cullà dati per processà dopu. L'espressioni regulari sò un aiutu affidabile in questa materia.

Permettenu di fà cumpetenze cum'è:

  1. Specificà u formatu di e dati, cum'è un indirizzu email o un numeru di telefunu.
  2. Pigliate una stringa è dividela in parechje stringhe più chjuche.
  3. Eseguite diverse operazioni cù u testu, cum'è a ricerca, l'estrazione di l'infurmazioni necessarii, o rimpiazzà una parte di i caratteri.

L'espressioni regulari permettenu ancu di fà operazioni micca triviali. À u primu sguardu, maestru di sta scienza ùn hè micca faciule. Ma in a pratica, tuttu hè standardizatu, cusì hè abbastanza per capisce una volta, dopu chì questu strumentu pò esse usatu micca solu in Python, ma ancu in ogni altra lingua di prugrammazione. Ancu Excel usa espressioni regulare per automatizà u processu di dati. Allora hè un peccatu per ùn aduprà stu strumentu.

Lascia un Audiolibro