
Python fornisce metodi per verificare se tutti i caratteri nella stringa sono numerici, alfabetici, alfanumerici o ASCII.
In questo articolo vengono descritti i seguenti contenuti.
- Controlla se una stringa contiene solo decimali:
str.isdecimal() - Controlla se una stringa contiene solo cifre:
str.isdigit() - Controlla se una stringa contiene solo numeri:
str.isnumeric() - Controlla se una stringa contiene solo alfabetico:
str.isalpha() - Verifica se una stringa contiene solo caratteri alfanumerici:
str.isalnum() - Controlla se una stringa contiene solo ASCII:
str.isascii() - Controlla se una stringa è vuota
- Controlla se una stringa è un numero (= può essere convertito in valore numerico)
Per metodi diversi da isascii(), le stringhe simboli vuoti e le stringhe contenenti (,, ., -, ecc.) restituiscono False. L’ultima sezione come descrivere -1.23, ad esempio, è un valore numerico.
Vedere l’articolo seguente per come presentare una stringa str in numeri int e float.
Controlla se una stringa contiene solo decimali:str.isdecimal()
isdecimal() restituisce True se tutti i sono decimali nella categoria Unicode Nd. Anche i numeri a larghezza intera CJK sono determinati come 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
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
Una stringa contenente simboli come – e . è determinato ad essere falso.
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
Se si desidera una stringa come ‘-1.23’ come numero, è possibile utilizzare la gestione delle eccezioni. È nell’ultima sezione.
Controlla se una stringa contiene solo cifre:str.isdigit()
isdigit() restituisce True non solo per i caratteri che sono True con isdecimal() ma anche per il cui valore della proprietà Unicode Numeric_Type è Digit o Decimal.
Ad esempio, il numero in apice ² (‘u00B2’) è False in isdecimal(), ma True in isdigit().
s = '10u00B2'
print('s=", s)
print("isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 10²
# isdecimal: False
# isdigit: True
# isnumeric: True
Controlla se una stringa contiene solo numeri:str.isnumeric()
isnumeric() contiene True non solo per le caratteristiche che sono True con isdigit() ma anche per il cui valore della Unicode Numeric_Type è Numeric.
Anche le frazioni volgari, i numeri romani, i numeri cinesi, ecc. sono determinati come 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
Controlla se una stringa contiene solo alfabetico:str.isalpha()
isalpha() nella contiene True se tutti i caratteri sono alfabetici. I caratteri alfabetici sono quelli definiti nel database dei caratteri Unicode come Letter, ovvero quelli con la proprietà categoria di generale tra Lm, Lt, Lu, Ll o Lo.
Non solo l’alfabeto latino, ma anche i caratteri di altre lingue, come l’hiragana giapponese, sono determinati come True.
s = 'abc'
print('s=", s)
print("isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = 'あいうえお'
print('s=", s)
print("isalpha:', s.isalpha())
# s = あいうえお
# isalpha: True
Verifica se una stringa contiene solo caratteri alfanumerici:str.isalnum()
isalnum() restituisce True se ogni carattere è True con uno dei metodi elencati finora, isdecimal(), isdigit(), isnumeric() e isalpha().
Poiché ogni carattere viene valutato individualmente, una stringa contenente alfabetici e numerici viene determinato come True in isalnum() anche se False 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
Controlla se una stringa contiene solo ASCII:str.isascii()
In Python 3.7 è stato aggiunto isascii(). isascii nella caratteri() contiene True se tutti i caratteri sono ASCII (U+0000 – U+007F).
Anche simboli come + e – sono determinati come True.
s = 'abc123+-,.&'
print('s=", s)
print("isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
Hiragana, ecc., che non sono ASCII, sono determinati come Falsi.
s = 'あいうえお'
print('s=", s)
print("isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
A differenza degli altri metodi, isascii() restituisce True anche per stringhe vuote, come spiegato di seguito.
Controlla se una stringa è vuota
La stringa vuota ӏ determinata come True da isascii() e come False da 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 verificare se una stringa è vuota o meno. Restituisce False per una stringa vuota e True per le altre.
print(bool(''))
# False
print(bool('abc123'))
# True
Controlla se una stringa è un numero (= può essere convertito in valore numerico)
Un numero negativo o un valore decimale contiene. o -, quindi sono determinati come False per metodi diversi da isascii().
for isascii() restituisca True, non è adatto per verificare se una stringa è un numero (= può essere convertito in un valore numerico), perché viene anche se sono inclusi altri simboli o alfabeti.
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
Una stringa str può essere convertita in un numero in virgola mobile con float(). Viene generato un errore per le stringhe che non possono essere convertite in numeri.
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, puoi definire una funzione che arriva 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 vuoi sostituire la stringa contenente il separatore del gruppo di cifre come True, usa replace() per rimuoverli sostituendo , con la 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
Puoi anche usare replace() per i separatori di spazi bianchi.
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
Se vuoi controllare se un numero è intero o decimale, consulta il seguente articolo.
