Python udostępnia kilka metod łańcuchowych pozwalających określić i sprawdzić, czy typ łańcucha jest numeryczny czy alfabetyczny.
Każda metoda jest objaśniona za pomocą przykładowego kodu.
- Określa, czy ciąg znaków jest cyfrą dziesiętną:
str.isdecimal()
- Określanie, czy ciąg znaków jest liczbą:
str.isdigit()
- Określa, czy łańcuch jest znakiem reprezentującym liczbę:
str.isnumeric()
- Określa, czy ciąg jest alfabetyczny:
str.isalpha()
- Określ, czy ciąg jest alfanumeryczny:
str.isalnum()
- Określa, czy ciągi są znakami ASCII:
str.isascii()
- Orzeczenie o pustym ciągu znaków
- Określ, czy ciągi znaków mogą być przekształcane na liczby
W przypadku metod innych niż isascii(), łańcuch zawierający pusty łańcuch, następujące symbole itd. jest fałszywy.
,
.
-
-1,23 itd., jako wartość liczbowa, jest wyjaśnione na końcu tego rozdziału.
Wyrażenia regularne mogą być używane do bardziej elastycznego określania typów znaków i wyodrębniania odpowiednich typów znaków.
Więcej informacji o tym, jak określić następujące elementy, można znaleźć w poniższym artykule
- Jak przekonwertować ciąg liczbowy (str) na liczbę (int, float)
- Jak określać wielkie i małe litery
- RELATED:Konwersja ciągu liczb na wartości liczbowe w Pythonie
- RELATED:Lista metod łańcuchowych do manipulowania wielkością liter w Pythonie
- Określa, czy ciąg znaków jest cyfrą dziesiętną: str.isdecimal()
- Określanie, czy ciąg znaków jest liczbą: str.isdigit()
- Określa, czy łańcuch jest znakiem reprezentującym liczbę: str.isnumeric()
- Określa, czy ciąg jest alfabetyczny: str.isalpha()
- Określ, czy ciąg jest alfanumeryczny: str.isalnum()
- Określa, czy ciągi są znakami ASCII: str.isascii()
- Orzeczenie o pustym ciągu znaków
- Określ, czy ciągi znaków mogą być przekształcane na liczby
Określa, czy ciąg znaków jest cyfrą dziesiętną: str.isdecimal()
W funkcji isdecimal() jest prawdą, jeśli wszystkie znaki są cyframi dziesiętnymi, czyli znakami z ogólnej kategorii Nd Unicode. Jest to również prawda dla pełnowymiarowych cyfr arabskich itd.
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
Jeśli zawiera on symbol, taki jak znak minus lub kropka, jest fałszywy. Na przykład, aby stwierdzić, że ciąg znaków taki jak „-1.23” jest wartością liczbową, można użyć obsługi wyjątków. Wyjaśniono to na końcu tej sekcji.
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
Określanie, czy ciąg znaków jest liczbą: str.isdigit()
W funkcji isdigit(), oprócz liczb, które są prawdziwe w funkcji isdecimal(), prawdziwe są również liczby, których wartość właściwości Unicode Numeric_Type jest Digit lub Decimal.
Na przykład liczba z indeksem górnym reprezentująca kwadrat jest fałszywa w funkcji isdecimal(), ale prawdziwa w funkcji isdigit().
- liczba w indeksie górnym oznaczająca kwadrat
- ²
- '\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
Określa, czy łańcuch jest znakiem reprezentującym liczbę: str.isnumeric()
W funkcji isnumeric(), oprócz liczb, które są prawdziwe w isdigit(), prawdziwe są również liczby, których wartość właściwości Unicode Numeric_Type jest Numeric.
Ułamki, cyfry rzymskie i chińskie są również prawdziwe.
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
Określa, czy ciąg jest alfabetyczny: str.isalpha()
W funkcji isalpha() prawdziwa jest właściwość kategorii ogólnej Unicode, która ma jedną z poniższych cech.
Lm
Lt
Lu
Ll
Lo
Alfabet, znaki chińskie itp. będą prawdziwe.
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
Cyfry arabskie są fałszywe, ale cyfry chińskie są prawdziwe, ponieważ są również znakami chińskimi; jednak zera w cyfrach chińskich są fałszywe.
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
Cyfry rzymskie są fałszywe.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
Określ, czy ciąg jest alfanumeryczny: str.isalnum()
W funkcji isalnum() jest prawdą, jeśli każdy znak jest prawdziwy w którejkolwiek z wymienionych dotychczas metod.
isdecimal()
isdigit()
isnumeric()
isalpha()
Każdy znak jest obliczany indywidualnie, więc łańcuch zawierający litery i cyfry będzie miał wartość true w isalnum(), nawet jeśli we wszystkich innych metodach będzie miał wartość false.
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
Określa, czy ciągi są znakami ASCII: str.isascii()
W Pythonie 3.7 dodano funkcję isascii(). Zwraca ona wartość true, jeśli wszystkie znaki w łańcuchu są znakami ASCII.
Oprócz liczb i liter prawdziwe są również symbole, takie jak + i -.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
Hiragana i inne znaki spoza ASCII są fałszywe.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
Jak zobaczymy dalej, w przeciwieństwie do innych metod, isascii() zwraca wartość true nawet dla pustego łańcucha.
Orzeczenie o pustym ciągu znaków
Pusty łańcuch ma wartość true dla metody isascii() i false dla pozostałych metod.
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
Użyj funkcji bool(), aby określić, czy jest to pusty łańcuch. Wartością zwracaną jest fałsz dla pustego łańcucha i prawda w przeciwnym przypadku.
print(bool(''))
# False
print(bool('abc123'))
# True
Określ, czy ciągi znaków mogą być przekształcane na liczby
Ciągi o wartościach ujemnych lub ułamkowych zawierają kropki lub znaki minus. Dlatego wynikiem jest fałsz dla wszystkich metod z wyjątkiem isascii().
Chociaż jest prawdziwa dla funkcji isascii(), nie nadaje się do określania, czy ciąg znaków można przekonwertować na wartość liczbową, ponieważ jest prawdziwa nawet wtedy, gdy zawiera inne symbole lub znaki alfabetyczne.
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
Łańcuchy mogą być konwertowane na liczby zmiennoprzecinkowe za pomocą funkcji float(). Błąd dla łańcuchów, które nie mogą zostać przekonwertowane.
print(float('-1.23'))
# -1.23
print(type(float('-1.23')))
# <class 'float'>
# print(float('abc'))
# ValueError: could not convert string to float: 'abc'
Dzięki obsłudze wyjątków można zdefiniować funkcję, która zwraca wartość true, gdy ciąg znaków można przekonwertować za pomocą funkcji 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
Jeśli chcesz określić, że liczba oddzielona przecinkami jest również prawdziwa, użyj funkcji replace(), aby usunąć przecinek (zastąpić go pustym łańcuchem).
def is_num_delimiter(s):
try:
float(s.replace(',', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter('10,000,000'))
# True
Jeśli chcesz obsługiwać delimitację białych spacji, możesz dodatkowo użyć funkcji 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