Python надає кілька методів рядка, щоб визначити та перевірити, чи є тип рядка числовим чи алфавітним.
Кожен метод пояснюється зі зразком коду.
- Визначає, чи є рядок десятковою цифрою:
str.isdecimal()
- Визначення того, чи є рядок числом:
str.isdigit()
- Визначає, чи є рядок символом, що представляє число:
str.isnumeric()
- Визначає, чи є рядок алфавітним:
str.isalpha()
- Визначте, чи є рядок буквено-цифровим:
str.isalnum()
- Визначає, чи є рядки символами ASCII:
str.isascii()
- Судження порожнього рядка
- Визначте, чи можна рядки перетворити на числа
Для методів, відмінних від isascii(), рядок, що містить порожній рядок, наступні символи тощо, є помилковим.
,
.
-
-1,23 тощо, як числове значення пояснюється в кінці цього розділу.
Регулярні вирази можна використовувати для більш гнучкого визначення типів символів і вилучення відповідних типів символів.
Перегляньте наступну статтю, щоб дізнатися більше про те, як визначити наступне
- Як перетворити числовий рядок (str) у число (int, float)
- Як визначити верхній і нижній регістр
- ПОВ’ЯЗАНІ:Перетворення рядка чисел у числові значення в Python
- ПОВ’ЯЗАНІ:Список рядкових методів для маніпулювання регістрами в Python
- Визначає, чи є рядок десятковою цифрою:str.isdecimal()
- Визначення того, чи є рядок числом:str.isdigit()
- Визначає, чи є рядок символом, що представляє число:str.isnumeric()
- Визначає, чи є рядок алфавітним:str.isalpha()
- Визначте, чи є рядок буквено-цифровим:str.isalnum()
- Визначає, чи є рядки символами ASCII:str.isascii()
- Судження порожнього рядка
- Визначте, чи можна рядки перетворити на числа
Визначає, чи є рядок десятковою цифрою:str.isdecimal()
У isdecimal() це правда, якщо всі символи є десятковими цифрами, тобто символами загальної категорії Nd Unicode. Це також вірно для арабських цифр на всю ширину тощо.
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
Якщо він містить такий символ, як знак мінус або крапка, він є помилковим. Наприклад, якщо ви хочете визначити, що рядок, наприклад ‘-1,23’, є числовим значенням, можна використовувати обробку винятків. Це пояснюється в кінці цього розділу.
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
Визначення того, чи є рядок числом:str.isdigit()
У isdigit() на додаток до чисел, які є істинними в isdecimal(), істинними є числа, значенням властивості Unicode Numeric_Type є Digit або Decimal.
Наприклад, надрядкове число, що представляє квадрат, є хибним у isdecimal(), але істинним у isdigit().
- надрядкове число, що позначає квадрат
- ²
- \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
Визначає, чи є рядок символом, що представляє число:str.isnumeric()
У isnumeric() на додаток до чисел, які є істинними в isdigit(), істинними є числа, значенням властивості Unicode Numeric_Type є числові.
Дроби, римські цифри та китайські цифри також вірні.
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
Визначає, чи є рядок алфавітним:str.isalpha()
У isalpha() властивість загальної категорії Unicode з одним із наступних є істиною.
Lm
Lt
Lu
Ll
Lo
Алфавіт, китайські ієрогліфи тощо будуть вірними.
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
Арабські цифри хибні, але китайські цифри правдиві, оскільки вони також є китайськими ієрогліфами; однак нулі в китайських цифрах є помилковими.
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
Римські цифри помилкові.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
Визначте, чи є рядок буквено-цифровим:str.isalnum()
У isalnum() це істинно, якщо кожен символ є істинним у будь-якому з наведених нижче методів.
isdecimal()
isdigit()
isnumeric()
isalpha()
Кожен символ оцінюється окремо, тому рядок, що містить літери та цифри, буде істинним у isalnum(), навіть якщо 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
Визначає, чи є рядки символами ASCII:str.isascii()
У Python 3.7 додано isascii(). Він повертає true, якщо всі символи в рядку є символами ASCII.
Крім цифр і букв, істинними є також такі символи, як + і -.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
Не ASCII хірагана та інші символи є помилковими.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
Як ми побачимо далі, на відміну від інших методів, isascii() повертає true навіть для порожнього рядка.
Судження порожнього рядка
Порожній рядок є істинним для isascii() і false для інших методів.
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
Використовуйте bool(), щоб визначити, чи це порожній рядок. Повертається значення false для порожнього рядка і true в іншому випадку.
print(bool(''))
# False
print(bool('abc123'))
# True
Визначте, чи можна рядки перетворити на числа
Рядки з від’ємним або дробовим значенням містять крапки або знаки мінус. Таким чином, результат є хибним для всіх методів, крім isascii().
Хоча це істинно для isascii(), воно не підходить для визначення того, чи можна перетворити рядок у числове значення, оскільки воно вірно, навіть якщо воно містить інші символи або символи алфавіту.
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
Рядки можна перетворити на числа з плаваючою комою за допомогою float(). Помилка для рядків, які не можна перетворити.
print(float('-1.23'))
# -1.23
print(type(float('-1.23')))
# <class 'float'>
# print(float('abc'))
# ValueError: could not convert string to float: 'abc'
За допомогою обробки винятків можна визначити функцію, яка повертає true, коли рядок можна перетворити за допомогою 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
Якщо ви хочете визначити, що число, розділене комами, також є істинним, використовуйте replace(), щоб видалити кому (замініть його порожнім рядком).
def is_num_delimiter(s):
try:
float(s.replace(',', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter('10,000,000'))
# True
Якщо ви хочете підтримувати розмежування пробілів, ви можете використовувати 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