Python oferă mai multe metode string pentru a determina și verifica dacă un tip de șir de caractere este numeric sau alfabetic.
Fiecare metodă este explicată cu exemple de cod.
- Determină dacă un șir de caractere este o cifră zecimală:
str.isdecimal()
- Determinarea dacă un șir de caractere este un număr:
str.isdigit()
- Determină dacă un șir de caractere este un caracter reprezentând un număr:
str.isnumeric()
- Determină dacă șirul este alfabetic:
str.isalpha()
- Determină dacă șirul este alfanumeric:
str.isalnum()
- Determină dacă șirurile de caractere sunt caractere ASCII:
str.isascii()
- Judecata de șir gol
- Determinați dacă șirurile de caractere pot fi convertite în numere
Pentru alte metode decât isascii(), un șir care conține un șir gol, următoarele simboluri etc., este fals.
,
.
-
-1,23, etc., ca valoare numerică, este explicată la sfârșitul acestei secțiuni.
Expresiile regulate pot fi utilizate pentru a determina tipurile de caractere într-un mod mai flexibil și pentru a extrage tipurile de caractere relevante.
Consultați următorul articol pentru mai multe informații despre cum să determinați următoarele
- Cum se convertește un șir de caractere numerice (str) într-un număr (int, float)
- Cum se determină majusculele și minusculele
- RELAȚIE:Conversia unui șir de numere în valori numerice în Python
- RELAȚIE:Listă de metode de șiruri de caractere pentru a manipula cazul în Python
- Determină dacă un șir de caractere este o cifră zecimală: str.isdecimal()
- Determinarea dacă un șir de caractere este un număr: str.isdigit()
- Determină dacă un șir de caractere este un caracter reprezentând un număr: str.isnumeric()
- Determină dacă șirul este alfabetic: str.isalpha()
- Determină dacă șirul este alfanumeric: str.isalnum()
- Determină dacă șirurile de caractere sunt caractere ASCII: str.isascii()
- Judecata de șir gol
- Determinați dacă șirurile de caractere pot fi convertite în numere
Determină dacă un șir de caractere este o cifră zecimală: str.isdecimal()
În isdecimal(), este adevărat dacă toate caracterele sunt cifre zecimale, adică caractere din categoria generală Nd a Unicode. De asemenea, este adevărat pentru cifrele arabe de lățime completă etc.
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
În cazul în care conține un simbol, cum ar fi semnul minus sau un punct, este fals. De exemplu, dacă doriți să determinați că un șir de caractere precum „-1,23” este o valoare numerică, puteți utiliza gestionarea excepțiilor. Acest lucru este explicat la sfârșitul acestei secțiuni.
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
Determinarea dacă un șir de caractere este un număr: str.isdigit()
În isdigit(), pe lângă numerele care sunt adevărate în isdecimal(), sunt adevărate și numerele a căror valoare a proprietății Unicode Numeric_Type este Digit sau Decimal.
De exemplu, un număr superscript care reprezintă un pătrat este fals în isdecimal(), dar adevărat în isdigit().
- număr superscript care reprezintă pătratul
- ²
- '\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
Determină dacă un șir de caractere este un caracter reprezentând un număr: str.isnumeric()
În isnumeric(), pe lângă numerele care sunt adevărate în isdigit(), numerele a căror valoare a proprietății Unicode Numeric_Type este Numeric sunt, de asemenea, adevărate.
Fracțiile, cifrele romane și cifrele chinezești sunt, de asemenea, adevărate.
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
Determină dacă șirul este alfabetic: str.isalpha()
În isalpha(), o proprietate de categorie generală Unicode cu una dintre următoarele valori este adevărată.
Lm
Lt
Lu
Ll
Lo
Alfabetul, caracterele chinezești etc. vor fi adevărate.
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
Cifrele arabe sunt false, dar cifrele chinezești sunt adevărate, deoarece sunt, de asemenea, caractere chinezești; cu toate acestea, zerourile din cifrele chinezești sunt false.
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
Numerele romane sunt false.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
Determină dacă șirul este alfanumeric: str.isalnum()
În isalnum(), este adevărat dacă fiecare caracter este adevărat în oricare dintre următoarele metode enumerate până acum.
isdecimal()
isdigit()
isnumeric()
isalpha()
Fiecare caracter este evaluat individual, astfel încât un șir care conține litere și numere va fi adevărat în isalnum() chiar dacă este fals în toate celelalte metode.
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
Determină dacă șirurile de caractere sunt caractere ASCII: str.isascii()
Python 3.7 a adăugat isascii(). Aceasta returnează true dacă toate caracterele din șir sunt caractere ASCII.
În plus față de numere și litere, sunt valabile și simboluri precum + și -.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
Hiragana non-ASCII și alte caractere sunt false.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
După cum vom vedea în continuare, spre deosebire de celelalte metode, isascii() returnează true chiar și pentru un șir gol.
Judecata de șir gol
Un șir gol este adevărat pentru isascii() și fals pentru celelalte metode.
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
Utilizați bool() pentru a determina dacă este un șir gol. Valoarea returnată este false pentru un șir gol și true în caz contrar.
print(bool(''))
# False
print(bool('abc123'))
# True
Determinați dacă șirurile de caractere pot fi convertite în numere
Șirurile de valori negative sau fracționare conțin puncte sau semne minus. Prin urmare, rezultatul este fals pentru toate metodele, cu excepția isascii().
Deși este adevărată pentru isascii(), nu este potrivită pentru a determina dacă un șir de caractere poate fi convertit într-o valoare numerică, deoarece este adevărată chiar dacă acesta conține alte simboluri sau caractere alfabetice.
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
Șirurile de caractere pot fi convertite în numere cu virgulă mobilă cu ajutorul funcției float(). Eroare pentru șirurile de caractere care nu pot fi 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'
Cu gestionarea excepțiilor, se poate defini o funcție care returnează true atunci când un șir de caractere poate fi convertit cu 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
Dacă doriți să determinați că un număr separat prin virgulă este, de asemenea, adevărat, utilizați replace() pentru a elimina virgula (înlocuiți-o cu un șir gol).
def is_num_delimiter(s):
try:
float(s.replace(',', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter('10,000,000'))
# True
Dacă doriți să sprijiniți delimitarea spațiilor albe, puteți utiliza replace() în continuare.
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