⊗pyPmREHHy 47 of 129 menu

Trattino all'interno di set nelle espressioni regolari Python

Il trattino è anch'esso un carattere speciale all'interno di [ ] (ma all'esterno - no). Se avete bisogno del trattino stesso come carattere - mettetelo in una posizione dove non verrà interpretato come separatore di un intervallo.

Perché è importante: potreste creare un intervallo di caratteri senza accorgervene. Ad esempio, così - '[:-@]' - pensate di selezionare il due punti, il trattino e la chiocciola, mentre in realtà ottenete l'intervallo di caratteri tra : e @. In questo intervallo rientrano i seguenti caratteri: ? < = > :

Da dove vengono? Dalla tabella ASCII - il due punti ha un numero inferiore alla chiocciola - e quindi si forma un intervallo. Cioè tutti gli intervalli sono determinati secondo la tabella ASCII (volendo ci si può fare affidamento).

Come risolvere il problema: posizionate il carattere trattino dove sicuramente non verrà interpretato come carattere di intervallo, ad esempio, all'inizio o alla fine (cioè dopo [ o prima di ]).

Si può anche escape il trattino - in questo caso indicherà sé stesso indipendentemente dalla posizione. Ad esempio, invece di [:-@] scrivere [:\-@] - e non ci sarà più l'intervallo, ma ci saranno tre caratteri - il due punti, il trattino e la chiocciola @.

Esempio

Nel seguente esempio il modello di ricerca è questo: cifra 1, poi una lettera da 'a' a 'z', poi cifra 2:

txt = '1a2 1-2 1c2 1z2' res = re.sub('1[a-z]2', '!', txt) print(res)

Risultato dell'esecuzione del codice:

'! 1-2 ! !'

Esempio

Ora escape il trattino. Di conseguenza il modello di ricerca è questo: cifra 1, poi lettera 'a', o trattino, o lettera 'z', poi cifra 2:

txt = '1a2 1-2 1c2 1z2' res = re.sub('1[a\-z]2', '!', txt) print(res)

Risultato dell'esecuzione del codice:

'! ! 1c2 !'

Esempio

Si può semplicemente spostare il trattino, senza escape arlo:

txt = '1a2 1-2 1c2 1z2' res = re.sub('1[az-]2', '!', txt) print(res)

Risultato dell'esecuzione del codice:

'! ! 1c2 !'

Esempio

Nel seguente esempio il modello di ricerca è questo: il primo carattere è una lettera minuscola o un trattino '-', poi due lettere 'x':

txt = 'axx Axx -xx @xx' res = re.sub('[a-z-]xx', '!', txt) print(res)

Risultato dell'esecuzione del codice:

'! Axx ! @xx'

Esempio

Nel seguente esempio il modello di ricerca è questo: il primo carattere è una lettera minuscola, maiuscola o un trattino '-', poi due lettere 'x':

txt = 'axx Axx -xx @xx' res = re.sub('[a-zA-Z-]xx', '!', txt) print(res)

Risultato dell'esecuzione del codice:

'! ! ! @xx'

Esempio

Si può posizionare il trattino tra due intervalli - lì sicuramente non creerà un altro intervallo:

txt = 'axx 9xx -xx @xx' res = re.sub('[a-z-0-9]xx', '!', txt) print(res)

Risultato dell'esecuzione del codice:

'! ! ! @xx'

Problemi pratici

Data la stringa:

txt = 'xaz xBz xcz x-z x@z'

Trovate tutte le stringhe secondo il seguente modello: lettera 'x', lettera maiuscola o minuscola o trattino, lettera 'z'.

Data la stringa:

txt = 'xaz x$z x-z xcz x+z x%z x*z'

Trovate tutte le stringhe secondo il seguente modello: lettera 'x', poi o dollaro, o trattino o più, poi lettera 'z'.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta