
Questo articolo descrive i confronti di stringhe in Python.
- Corrispondenza esatta (confronto di uguaglianza):
==, !=
- Partita parziale:
in, not in
- Partita avanti/indietro:
startswith(), endswith()
- Confronto ordini:
<, <=, >, >=
- Confronto senza distinguere tra maiuscole e minuscole:
upper(), lower()
- Regex:
re.search(), re.fullmatch()
Corrispondenza esatta (confronto di uguaglianza):==, !=
Come per i numeri, l’operatore == determina se due stringhe sono uguali. Se sono uguali, viene restituito vero; in caso contrario, viene restituito False.
print('abc' == 'abc')
# True
print('abc' == 'xyz')
# False
Facole distinguere tra maiuscole e minuscole e lo stesso vale per i confronti di altri operatori e metodi. I confronti senza distinguere tra maiuscole e minuscole sono di seguito.
print('abc' == 'ABC')
# False
!= restituisce True se non sono uguali e False se sono uguali.
print('abc' != 'xyz')
# True
print('abc' != 'abc')
# False
Partita parziale:in, not in
Utilizzare l’operatore in per corrispondenze parziali, ovvero se una stringa contiene l’altra stringa.
x in y restituisce True se x è contenuto in y (x è una sottostringa di y) e False se non lo è. Se ogni carattere di x è contenuto in y in modo discreto, viene restituito False.
print('bbb' in 'aaa-bbb-ccc')
# True
print('xxx' in 'aaa-bbb-ccc')
# False
print('abc' in 'aaa-bbb-ccc')
# False
not in restituisce True se non è incluso, False se è incluso.
print('xxx' not in 'aaa-bbb-ccc')
# True
print('bbb' not in 'aaa-bbb-ccc')
# False
in e non in vengono utilizzati anche per verificare l’esistenza di elementi in un elenco. Vedere il seguente articolo per i dettagli.
Partita avanti/indietro:startswith(), endswith()
Utilizzare il metodo string bootswith() per il forward matching, cioè se una stringa inizia con la stringa specificata.
s = 'aaa-bbb-ccc'
print(s.startswith('aaa'))
# True
print(s.startswith('bbb'))
# False
Puoi anche specificare una tupla di stringhe.
True viene restituito se la stringa inizia con uno degli elementi della tupla e False viene restituito se la stringa non inizia con nessuno di essi. Si noti che viene generato un errore se si specifica una lista invece di una tupla.
print(s.startswith(('aaa', 'bbb', 'ccc')))
# True
print(s.startswith(('xxx', 'yyy', 'zzz')))
# False
# print(s.startswith(['a', 'b', 'c']))
# TypeError: startswith first arg must be str or a tuple of str, not list
Utilizzare il metodo stringendwith() per la corrispondenza all’indietro, ovvero se una stringa termina con la stringa specificata. Il suo utilizzo è lo stesso di bootswith().
print(s.endswith('ccc'))
# True
print(s.endswith('bbb'))
# False
print(s.endswith(('aaa', 'bbb', 'ccc')))
# True
Confronto ordini:<, <=, >, >=
È possibile < le stringhe con gli operatori <=, > e > oltre ai numeri. Le stringhe vengono confrontate in ordine lessicale.
print('a' < 'b')
# True
print('aa' < 'ab')
# True
print('abc' < 'abcd')
# True
L’ordine dei caratteri viene confrontato in punti di codice Unicode.
Puoi ottenere il punto di codice Unicode di un carattere con la funzione incorporata ord().
print(ord('a'))
# 97
print(ord('b'))
# 98
Le lettere maiuscole hanno punti di codice più piccoli rispetto alle lettere minuscole.
print('Z' < 'a')
# True
print(ord('Z'))
# 90
Quando un elenco di stringhe viene ordinato con il metodo list sort() o la funzione incorporata sorted(), l’ordine viene determinato anche in base ai punti di codice Unicode.
print(sorted(['aaa', 'abc', 'Abc', 'ABC']))
# ['ABC', 'Abc', 'aaa', 'abc']
Confronto senza distinguere tra maiuscole e minuscole:upper(), lower()
Tutti gli operatori ei metodi descritti finora fanno distinzione tra maiuscole e minuscole.
Hai bisogno di scegliere senza distinguere tra maiuscole e minuscole, puoi confrontare senza utilizzare entrambe le stringhe in maiuscolo.
s1 = 'abc'
s2 = 'ABC'
print(s1 == s2)
# False
print(s1.lower() == s2.lower())
# True
Regex:re.search(), re.fullmatch()
È possibile utilizzare le espressioni regolari per affrontare più flessibili.
ricerca()
Usa re.search() per la corrispondenza parziale, in avanti e all’indietro. Si noti che re.match() può essere utilizzato anche per il forward matching, ma non è discusso qui.
Vari metacaratteri (caratteri speciali) possono essere utilizzati per i modelli di regolari espressioni, ma è anche possibile specificare semplicemente una stringa così com’è. Viene restituito un oggetto di corrispondenza se la stringa contraria è inclusa e None in caso. Gli oggetti di corrispondenza vengono sempre valutati come True.
import re
s = 'aaa-AAA-123'
print(re.search('aaa', s))
#
print(re.search('xxx', s))
# None
Il metacarattere ^ corrisponde all’inizio della stringa e $ corrisponde alla fine della stringa.
print(re.search('^aaa', s))
#
print(re.search('^123', s))
# None
print(re.search('aaa$', s))
# None
print(re.search('123$', s))
#
Inoltre, sono disponibili una varietà di altri metacaratteri e sequenze speciali.
Ad esempio, [AZ] rappresenta una lettera qualsiasi dell’alfabeto maiuscolo e significa che il modello precedente viene rappresentato + una o più volte. Pertanto, [AZ]+ corrisponde a qualsiasi sottostringa composta da uno o più caratteri alfabetici maiuscoli consecutivi.
print(re.search('[A-Z]+', s))
#
Consulta l’articolo seguente caratteri per esempi di base di modelli di espressioni regolari, ad esempio un modello similitudine a jolly.
re.fullmatch()
Utilizzare re.fullmatch() per verificare se l’intera stringa corrisponde o meno a un modello di regolare. Anche se alcune parti sono assegnati, viene restituito nessuno se alcune parti non assegnati.
s = '012-3456-7890'
print(re.fullmatch(r'd{3}-d{4}-d{4}', s))
#
s = 'tel: 012-3456-7890'
print(re.fullmatch(r'd{3}-d{4}-d{4}', s))
# None
d rappresenta un numero e {n} rappresenta n ripetizioni. Poiché la barra rovesciata viene utilizzata in speciali di espressioni regolari, come d, è utile utilizzare stringhe grezze (r” o r””) che trattano le barre rovesciate come caratteri letterali.
re.fullmatch() è stato aggiunto in Python 3.4. Nelle versioni precedenti, puoi usare re.search() con ^ e $ per fare lo stesso. Puoi anche usare re.match() e $, anche se non è mostrato qui.
s = '012-3456-7890'
print(re.search(r'^d{3}-d{4}-d{4}$', s))
#
s = 'tel: 012-3456-7890'
print(re.search('^d{3}-d{4}-d{4}$', s))
# None
ri.IGNORECASE
Specificando re.IGNORECASE come flag di argomenti di funzioni come research() e re.fullmatch(), è possibile il confronto senza differenze tra maiuscole e minuscole.
s = 'ABC'
print(re.search('abc', s))
# None
print(re.search('abc', s, re.IGNORECASE))
#