Python nabízí několik řetězcových metod pro určení a kontrolu, zda je řetězec číselného nebo abecedního typu.
Každá metoda je vysvětlena pomocí ukázkového kódu.
- Určuje, zda je řetězec desetinnou číslicí.:
str.isdecimal()
- Určení, zda je řetězec číslo:
str.isdigit()
- Určuje, zda je řetězec znakem představujícím číslo.:
str.isnumeric()
- Určí, zda je řetězec abecední.:
str.isalpha()
- Určení, zda je řetězec alfanumerický:
str.isalnum()
- Určuje, zda jsou řetězce znaky ASCII.:
str.isascii()
- Posouzení prázdného řetězce
- Určení, zda lze řetězce převést na čísla
U jiných metod než isascii() je řetězec obsahující prázdný řetězec, následující symboly atd. nepravdivý.
,
.
-
-1,23 atd. jako číselná hodnota je vysvětleno na konci tohoto oddílu.
Regulární výrazy lze použít k pružnějšímu určení typů znaků a k extrakci příslušných typů znaků.
Další informace o tom, jak zjistit následující údaje, naleznete v následujícím článku.
- Jak převést číselný řetězec (str) na číslo (int, float)
- Jak určit velká a malá písmena
- SOUVISEJÍCÍ:Převod řetězce čísel na číselné hodnoty v jazyce Python
- SOUVISEJÍCÍ:Seznam řetězcových metod pro manipulaci s velikostí písmen v jazyce Python
- Určuje, zda je řetězec desetinnou číslicí.: str.isdecimal()
- Určení, zda je řetězec číslo: str.isdigit()
- Určuje, zda je řetězec znakem představujícím číslo.: str.isnumeric()
- Určí, zda je řetězec abecední.: str.isalpha()
- Určení, zda je řetězec alfanumerický: str.isalnum()
- Určuje, zda jsou řetězce znaky ASCII.: str.isascii()
- Posouzení prázdného řetězce
- Určení, zda lze řetězce převést na čísla
Určuje, zda je řetězec desetinnou číslicí.: str.isdecimal()
V příkazu isdecimal() platí, že všechny znaky jsou desítkové číslice, tj. znaky obecné kategorie Nd Unicode. Platí také pro arabské číslice plné šířky atd.
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
Pokud obsahuje symbol, například znaménko minus nebo tečku, je nepravdivý. Chcete-li například určit, že řetězec, jako je '-1,23', je číselná hodnota, můžete použít zpracování výjimek. To je vysvětleno na konci této části.
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
Určení, zda je řetězec číslo: str.isdigit()
V isdigit() jsou kromě čísel, která jsou pravdivá v isdecimal(), pravdivá také čísla, jejichž hodnota vlastnosti Unicode Numeric_Type je Digit nebo Decimal.
Například číslo s horním indexem představující čtverec je v isdecimal() false, ale v isdigit() true.
- číslo s horním indexem představující čtverec
- ²
- '\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
Určuje, zda je řetězec znakem představujícím číslo.: str.isnumeric()
V isnumeric() jsou kromě čísel, která jsou pravdivá v isdigit(), pravdivá také čísla, jejichž hodnota vlastnosti Unicode Numeric_Type je Numeric.
Zlomky, římské číslice a čínské číslice jsou také pravdivé.
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
Určí, zda je řetězec abecední.: str.isalpha()
V isalpha() je pravdivá obecná vlastnost kategorie Unicode s jednou z následujících hodnot.
Lm
Lt
Lu
Ll
Lo
Abeceda, čínské znaky atd. budou pravdivé.
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
Arabské číslice jsou nepravdivé, ale čínské číslice jsou pravdivé, protože jsou zároveň čínskými znaky; nicméně nuly v čínských číslicích jsou nepravdivé.
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
Římské číslice jsou falešné.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
Určení, zda je řetězec alfanumerický: str.isalnum()
V metodě isalnum() je true, pokud je každý znak true v některé z následujících dosud uvedených metod.
isdecimal()
isdigit()
isnumeric()
isalpha()
Každý znak se vyhodnocuje samostatně, takže řetězec obsahující písmena a číslice bude v metodě isalnum() pravdivý, i když ve všech ostatních metodách bude nepravdivý.
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
Určuje, zda jsou řetězce znaky ASCII.: str.isascii()
Do jazyka Python 3.7 byla přidána funkce isascii(). Vrací true, pokud jsou všechny znaky v řetězci znaky ASCII.
Kromě čísel a písmen platí také symboly jako + a -.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
Znaky hiragana a další znaky, které nejsou v jazyce ASCII, jsou falešné.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
Jak uvidíme dále, na rozdíl od ostatních metod vrací metoda isascii() hodnotu true i v případě prázdného řetězce.
Posouzení prázdného řetězce
Prázdný řetězec je true pro isascii() a false pro ostatní metody.
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
Pomocí funkce bool() zjistíte, zda se jedná o prázdný řetězec. Návratová hodnota je false pro prázdný řetězec a true v opačném případě.
print(bool(''))
# False
print(bool('abc123'))
# True
Určení, zda lze řetězce převést na čísla
Řetězce záporných nebo zlomkových hodnot obsahují tečky nebo znaménka minus. Proto je výsledek u všech metod kromě isascii() nepravdivý.
Ačkoli je pravdivá pro funkci isascii(), není vhodná pro určení, zda lze řetězec převést na číselnou hodnotu, protože je pravdivá, i když obsahuje jiné symboly nebo abecední znaky.
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
Řetězce lze převést na čísla s plovoucí desetinnou čárkou pomocí funkce float(). Chyba pro řetězce, které nelze převést.
print(float('-1.23'))
# -1.23
print(type(float('-1.23')))
# <class 'float'>
# print(float('abc'))
# ValueError: could not convert string to float: 'abc'
Pomocí zpracování výjimek lze definovat funkci, která vrací true, pokud lze řetězec převést pomocí funkce 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
Pokud chcete určit, že číslo oddělené čárkou je také pravdivé, použijte funkci replace(), která čárku odstraní (nahradí ji prázdným řetězcem).
def is_num_delimiter(s):
try:
float(s.replace(',', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter('10,000,000'))
# True
Pokud chcete podporovat oddělování bílých znaků, můžete dále použít funkci 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