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 Юникода. Это также верно для арабских цифр во всю ширину и т.д.
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 равно Numeric.
Дробь, римские цифры и китайские цифры также верны.
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(), даже если ложной во всех остальных методах.
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() и ложью для других методов.
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(). Ошибка для строк, которые не могут быть преобразованы.
- СООТВЕТСТВУЮЩИЕ:Преобразование числовой строки str в число int, float в Python
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