Python fornisce diversi metodi per determinare e controllare se una stringa è di tipo numerico o alfabetico.
Ogni metodo è spiegato con codice di esempio.
- Determina se una stringa è una cifra decimale:
str.isdecimal()
- Determinare se una stringa è un numero:
str.isdigit()
- Determina se una stringa è un carattere che rappresenta un numero:
str.isnumeric()
- Determina se la stringa è alfabetica:
str.isalpha()
- Determinare se la stringa è alfanumerica:
str.isalnum()
- Determina se le stringhe sono caratteri ASCII:
str.isascii()
- Giudizio della stringa vuota
- Determinare se le stringhe possono essere convertite in numeri
Per i metodi diversi da isascii(), una stringa contenente una stringa vuota, i seguenti simboli, ecc.
,
.
-
-1,23, ecc., come valore numerico è spiegato alla fine di questa sezione.
Le espressioni regolari possono essere usate per determinare i tipi di carattere in modo più flessibile e per estrarre i tipi di carattere rilevanti.
Vedere il seguente articolo per maggiori informazioni su come determinare
- Come convertire una stringa numerica (str) in un numero (int, float)
- Come determinare le maiuscole e le minuscole
- COLLEGATO:Conversione di una stringa di numeri in valori numerici in Python
- COLLEGATO:Elenco di metodi di stringa per manipolare il caso in Python
- Determina se una stringa è una cifra decimale: str.isdecimal()
- Determinare se una stringa è un numero: str.isdigit()
- Determina se una stringa è un carattere che rappresenta un numero: str.isnumeric()
- Determina se la stringa è alfabetica: str.isalpha()
- Determinare se la stringa è alfanumerica: str.isalnum()
- Determina se le stringhe sono caratteri ASCII: str.isascii()
- Giudizio della stringa vuota
- Determinare se le stringhe possono essere convertite in numeri
Determina se una stringa è una cifra decimale: str.isdecimal()
In isdecimal(), è vero se tutti i caratteri sono cifre decimali, cioè caratteri della categoria generale Nd di Unicode. È anche vero per i numeri arabi a tutta larghezza, ecc.
s = '1234567890'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True
s = '1234567890'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True
Se contiene un simbolo come un segno meno o un punto, è falso. Per esempio, se volete determinare che una stringa come '-1.23' è un valore numerico, potete usare la gestione delle eccezioni. Questo è spiegato alla fine di questa sezione.
s = '-1.23'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = -1.23
# isdecimal: False
# isdigit: False
# isnumeric: False
Determinare se una stringa è un numero: str.isdigit()
In isdigit(), oltre ai numeri che sono veri in isdecimal(), sono veri anche i numeri il cui valore di proprietà Unicode Numeric_Type è Digit o Decimal.
Per esempio, un numero in apice che rappresenta un quadrato è falso in isdecimal() ma vero in isdigit().
- numero apice che rappresenta il quadrato
- ²
- '\u00B2}'
s = '10\u00B2'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 10²
# isdecimal: False
# isdigit: True
# isnumeric: True
Determina se una stringa è un carattere che rappresenta un numero: str.isnumeric()
In isnumeric(), oltre ai numeri che sono veri in isdigit(), sono veri anche i numeri il cui valore di proprietà Unicode Numeric_Type è Numeric.
Anche le frazioni, i numeri romani e i numeri cinesi sono veri.
s = '\u00BD'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = ½
# isdecimal: False
# isdigit: False
# isnumeric: True
s = '\u2166'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = Ⅶ
# isdecimal: False
# isdigit: False
# isnumeric: True
s = '一二三四五六七八九〇'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 一二三四五六七八九〇
# isdecimal: False
# isdigit: False
# isnumeric: True
s = '壱億参阡萬'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 壱億参阡萬
# isdecimal: False
# isdigit: False
# isnumeric: True
Determina se la stringa è alfabetica: str.isalpha()
In isalpha(), una proprietà di categoria generale Unicode con una delle seguenti è vera.
Lm
Lt
Lu
Ll
Lo
L'alfabeto, i caratteri cinesi, ecc. saranno veri.
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
I numeri arabi sono falsi, ma i numeri cinesi sono veri perché sono anche caratteri cinesi; tuttavia, gli zeri nei numeri cinesi sono falsi.
s = '1234567890'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 1234567890
# isalpha: False
s = '1234567890'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 1234567890
# isalpha: False
s = '一二三四五六七八九'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 一二三四五六七八九
# isalpha: True
s = '壱億参阡萬'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 壱億参阡萬
# isalpha: True
s = '〇'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 〇
# isalpha: False
I numeri romani sono falsi.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
Determinare se la stringa è alfanumerica: str.isalnum()
In isalnum(), è vero se ogni carattere è vero in uno qualsiasi dei seguenti metodi elencati finora.
isdecimal()
isdigit()
isnumeric()
isalpha()
Ogni carattere è valutato individualmente, quindi una stringa contenente lettere e numeri sarà vera in isalnum() anche se falsa in tutti gli altri metodi.
s = 'abc123'
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = abc123
# isalnum: True
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
Determina se le stringhe sono caratteri ASCII: str.isascii()
Python 3.7 ha aggiunto isascii(). Restituisce true se tutti i caratteri della stringa sono caratteri ASCII.
Oltre ai numeri e alle lettere, sono veri anche i simboli come + e -.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
Lo hiragana non ASCII e altri caratteri sono falsi.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
Come vedremo in seguito, a differenza degli altri metodi, isascii() restituisce true anche per una stringa vuota.
Giudizio della stringa vuota
Una stringa vuota è vera per isascii() e falsa per gli altri metodi.
s = ''
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s =
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True
Usa bool() per determinare se è una stringa vuota. Il valore di ritorno è false per una stringa vuota e true altrimenti.
print(bool(''))
# False
print(bool('abc123'))
# True
Determinare se le stringhe possono essere convertite in numeri
Le stringhe con valori negativi o frazionari contengono punti o segni meno. Pertanto, il risultato è falso per tutti i metodi eccetto isascii().
Sebbene sia vero per isascii(), non è adatto a determinare se una stringa può essere convertita in un valore numerico, poiché è vero anche se contiene altri simboli o caratteri alfabetici.
s = '-1.23'
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s = -1.23
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True
Le stringhe possono essere convertite in numeri in virgola mobile con float(). Errore per le stringhe che non possono essere convertite.
print(float('-1.23'))
# -1.23
print(type(float('-1.23')))
# <class 'float'>
# print(float('abc'))
# ValueError: could not convert string to float: 'abc'
Con la gestione delle eccezioni, si può definire una funzione che restituisce true quando una stringa può essere convertita con float().
def is_num(s):
try:
float(s)
except ValueError:
return False
else:
return True
print(is_num('123'))
# True
print(is_num('-1.23'))
# True
print(is_num('+1.23e10'))
# True
print(is_num('abc'))
# False
print(is_num('10,000,000'))
# False
Se volete determinare che un numero separato da una virgola sia anche vero, usate replace() per rimuovere la virgola (sostituirla con una stringa vuota).
def is_num_delimiter(s):
try:
float(s.replace(',', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter('10,000,000'))
# True
Se volete supportare la delimitazione degli spazi bianchi, potete usare ulteriormente replace().
def is_num_delimiter2(s):
try:
float(s.replace(',', '').replace(' ', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter2('10,000,000'))
# True
print(is_num_delimiter2('10 000 000'))
# True