Come nuovo sviluppatore, le espressioni regolari (o regex come è comunemente noto) possono essere scoraggianti a causa della sintassi strana e poco familiare:
Quando ero un nuovo sviluppatore e ho visto l’espressione sopra per la prima volta, ricordo che il mio primo pensiero è stato "dire cosa? Non sarò mai in grado di imparare quel gobbledygook. Questo è troppo per me. Non posso farlo."
Ma tu puoi! è solo questione di superare quella sensazione opprimente iniziale che le espressioni regolari siano troppo estranee. Proprio come imparare o parlare una lingua straniera ‚Äî una volta che ci hai preso la mano, verrà in modo abbastanza naturale. Lo prometto!
In questo articolo, diamo un’occhiata a cosa sono le espressioni regolari, perché vengono utilizzate e come usarle in Python. Al termine di questo articolo, avrai una solida conoscenza delle espressioni regolari in modo da poter interpretare il significato dell’espressione sopra!
Cosa sono le espressioni regolari?
Quando diamo un’occhiata a cos’è un’espressione regolare, dobbiamo ricordarci che cos’è una stringa. Ricorda che una stringa è solo una raccolta di caratteri uniti e delimitati da una serie di virgolette:
"Ciao mondo" "555-555-5555" "John Doe 123 Main St. Anywhere, USA 99999-9999" "[email protected]"
Questi sono tutti esempi di stringhe. Possono essere di qualsiasi lunghezza o nessuna lunghezza. Le espressioni regolari, o più comunemente abbreviate in regex, sono espressioni i cui componenti corrispondono a modelli con stringhe per trovare una sorta di informazione.
L’81% dei partecipanti ha dichiarato si sono sentiti più sicuri delle loro prospettive di lavoro nel settore tecnologico dopo aver frequentato un bootcamp. Fatti abbinare a un bootcamp oggi.
Il laureato medio del bootcamp ha trascorso meno di sei mesi nella transizione di carriera, dall’avvio di un bootcamp alla ricerca del primo lavoro.
Che cosa c’è di bello nelle espressioni regolari è che non gli interessa necessariamente la lingua in cui stai codificando in ‚Äî è abbastanza indipendente dal linguaggio. La differenza sta nei metodi del linguaggio e nel modo in cui eseguire azioni utilizzando tali espressioni.
A cosa servono le espressioni regolari?
Regex è un modello che vorremmo cercare specificamente in una stringa. Possiamo usare l’espressione regolare per cercare una frase o un modello particolare per sostituirlo con qualcos’altro, oppure possiamo convalidare i moduli per essere certi che un utente stia inserendo informazioni in un determinato formato in modo che sia coerente tra tutti gli utenti.
Cerca e sostituisci
Supponiamo per esempio che abbiamo un numero di telefono presentato in questo formato:
555 555 5555
Questo è un formato valido per un numero di telefono negli Stati Uniti. Ma se volessimo sostituire gli spazi con i trattini? O aggiungere parentesi intorno al prefisso e un trattino per renderlo più leggibile?
Possiamo usare le espressioni regolari per questo! Nella prossima sezione vedremo come farlo con Python ‚Äî per ora voglio che tu abbia un’idea generale di cosa puoi fare con le espressioni regolari e di come possono essere utili.
Il risultato che vedremmo dopo una ricerca e sostituiremo su un numero di telefono in Python per il formato che vorremmo usare sarebbe:
Non è necessario codificare o cercare un valore o un indice specifico della stringa nelle espressioni regolari perché possiamo semplicemente cercare i modelli nelle stringhe e manipolare tutti i record che dobbiamo abbinare.
Convalida
Hai mai compilato qualcosa su un sito solo per visualizzarlo un messaggio di errore a causa di un simbolo mancato o di uno schema che non hai seguito? Molto probabilmente sono state utilizzate espressioni regolari per assicurarti che il tuo input corrispondesse a ciò che il loro database sta cercando.
Questo si chiama convalida ed è super utile quando si creano moduli per essere certi che un numero di telefono segua il formato in cui desideri che sia o che un indirizzo e-mail sia un indirizzo e-mail formattato correttamente, o che una password corrisponda ai parametri che hai impostato per essere una password valida (lunghezza, caratteri speciali, cifre, maiuscole o minuscole , ecc.).
Questo aiuta a prevenire errori nel database avvisando l’utente di errori di battitura o modelli non corrispondenti.
Nella sezione successiva, daremo un’occhiata ai componenti o ai matcher di pattern che costruiscono le espressioni regolari.
Tipi di Regex Pattern Matcher
Caratteri letterali, metacaratteri e quantificatori creano i tipi di pattern matcher che vediamo in regex. Un pattern matcher è un carattere che viene utilizzato per aiutare a trovare un pattern in una stringa. è l’elemento costitutivo principale di un’espressione regolare.
Caratteri letterali
L’esempio più elementare di un comparatore di pattern in regex è un carattere letterale. Corrisponde a un carattere oa una stringa codificati.
Esempi:
ciao
‚áí raccolta di cinque caratteri distinti.
Quando un modello regex viene applicato qui, cerca ciascuno di questi caratteri in successione. "ciao", "ciao" o "ciao" passerebbe un controllo del modello, ma "Hello", "helo" o "HeLlo" non lo farebbe.
"Il Karma professionale è entrato nella mia vita quando ne avevo più bisogno e mi ha aiutato rapidamente ad abbinarmi a un bootcamp. Due mesi dopo la laurea, ho trovato il lavoro dei miei sogni in linea con i miei valori e obiettivi nella vita!"
Venus, Software Engineer presso Rockbot
A
‚áí raccolta di un carattere distinto.
Poiché l’espressione regolare cerca caratteri distinti, fa anche distinzione tra maiuscole e minuscole. Quindi "A" passerebbe, ma "un" non lo farebbe. Ne parleremo meglio tra un po’.
Una frase semplice
. ‚áí raccolta di diversi caratteri distinti.
Regex cerca ogni carattere nell’espressione in successione quando esamina una stringa. Se "Una frase semplice" non è nella stringa cercata esattamente come è scritto nell’espressione regolare, non passerebbe.
Caratteri di escape
Dai un’occhiata all’ultimo esempio. Notare che c’è un davanti al punto. Un punto nella sintassi delle espressioni regolari è sinonimo di parole chiave in linguaggi come JavaScript o Python.
Non puoi utilizzare un punto/punto da solo se vuoi che faccia parte di uno schema in espressioni regolari. Devi eseguire l’escape del carattere affinché il motore delle espressioni regolari lo interpreti come una rappresentazione letterale di un punto invece del significato dell’espressione regolare.
Ecco alcune altre sequenze speciali di caratteri che devono essere sfuggiti se si desidera il carattere letterale invece del significato tradotto in cui il motore regex lo compila.
- Asterisco *
- Backslash /
- Più +
- Caretto ^
- Segno del dollaro $
- Punto/punto .
- Tubo |
- Domanda Mark ?
- Parentesi – entrambi i tipi ()
- parentesi graffe – entrambi i tipi {}
I caratteri letterali nell’espressione regolare corrispondono esattamente al carattere che includi come parte del modello. Se vuoi includere un carattere che è elencato sopra, assicurati di evitarlo in modo che possa anche far parte della tua regex.
Common Matchers
Lo scopo di un matcher è quello di abbinare più lettere in uno schema. Questa raccolta di simboli di corrispondenza dei modelli è abbastanza coerente tra i linguaggi di programmazione che utilizzano regex.
Corrispondente | Descrizione | Esempio |
. | Corrisponde a qualsiasi carattere | nw corrisponderebbe a now, naw o new, ecc. Qualsiasi carattere supera il test |
^regex | Cerca il pattern in inizio della riga | ^hello corrisponderebbe a ciao in una riga che iniziava con quel pattern |
regex$ | Cerca il pattern alla fine della riga | world$ corrisponderebbe al mondo in una riga che terminava con quel modello |
[abc] | Corrisponde a, b o c | [misp]è considerato un set e corrisponderebbe a qualsiasi stringa che contenga uno di questi caratteri. Ad esempio, potrebbe corrispondere a tutte le singole lettere in mississippi e miss, ma solo ad alcune delle lettere in marsh e missouri |
[abc][xyz] | Matto hes a, b o c seguito da x, y o z | /[Mm][sip]/ corrisponderebbe a qualsiasi stringa che inizia con M o m, seguita da un insieme che ha una delle caratteri in [sip] |
[^abc] | Non a, b o c | [^rstlne] corrisponderebbero qualsiasi carattere che non sia r, s, t, l, n o e |
[a-zA-Z0-9] | Corrisponde a qualsiasi carattere all’interno dell’intervallo | [an] corrisponderebbe a qualsiasi carattere compreso tra a e n. e, end, blind, can, hanno tutti caratteri che corrispondono interamente qui |
A|B | A o B | M|m. corrisponderebbe a qualsiasi parola o frase di almeno due caratteri di lunghezza che corrisponde a una M o una m più almeno uno o più altri caratteri. |
CAT | Corrisponde a C, seguito da A, seguito da T | ciao mondo corrisponderà esattamente a ciao mondo |
Metacaratteri
Anche le espressioni regolari utilizzano i metacaratteri per descrivere un modello. I metacaratteri hanno una sorta di significato dietro di loro e descriveranno la forma del modello.
Metacarattere | Descrizione | Esempio |
d | Corrisponde a qualsiasi cifra | d corrisponderebbe a 1, 2 o 3, ecc. Abbreviazione per [0-9] |
D | Corrisponde a qualsiasi carattere non numerico | D corrisponderebbe a A, B, g, ecc. Abbreviazione per [^0-9] |
s | Corrisponde a qualsiasi spazio bianco carattere | corrisponde a nuove righe, tabulazioni, spazi, ecc. |
S | Corrisponde a qualsiasi -carattere spazio bianco | S corrisponde a qualsiasi carattere tranne uno spazio bianco. |
w | Corrisponde a qualsiasi carattere di parola | Un carattere di parola, abbreviazione di [a-zA-Z_0-9] |
W | Corrisponde a qualsiasi carattere non di parola | [W] corrisponderebbe a qualsiasi carattere speciale. Scorciatoia per [^w] |
Nota: i metacaratteri delle lettere maiuscole (W, D, ecc.) di solito corrispondono all’opposto di cosa fanno i metacaratteri delle lettere minuscole (w, d, ecc.).
Quantificatori
Quantificatore | Descrizione | Esempio |
+ | Uno o più caratteri precedenti | d+ corrisponde a due o più cifre |
* | Zero o più del carattere precedente | .* corrisponderebbe a qualsiasi carattere 0 o più volte Nota: tecnicamente una stringa vuota soddisferebbe questa regex! |
? | Zero o uno dei carattere precedente | a?.* corrisponderebbe a a, any, hello, world |
{number} | Corrisponde esattamente al carattere precedente numero di volte | d{3} corrisponde esattamente a tre cifre [0-9] |
{num1,num2} | Corrisponde al carattere precedente in un intervallo di numeri | d{3,5} corrisponde da 3 a 5 cifre che sono [0-9] |
Utilizza i quantificatori, i metacaratteri e altri matcher come elementi costitutivi delle tue espressioni regolari. La sintassi qui menzionata è simile in più lingue che utilizzano espressioni regolari.