Python определяет и проверяет, является ли строка числовой или буквенной

Бизнес

Python предоставляет несколько строковых методов для определения и проверки того, является ли тип строки числовым или буквенным.

Каждый метод объясняется с помощью примера кода.

  • Определяет, является ли строка десятичной цифрой:str.isdecimal()
  • Определение того, является ли строка числом:str.isdigit()
  • Определяет, является ли строка символом, представляющим число:str.isnumeric()
  • Определяет, является ли строка алфавитной:str.isalpha()
  • Определите, является ли строка буквенно-цифровой:str.isalnum()
  • Определяет, являются ли строки символами ASCII:str.isascii()
  • Суждение о пустой строке
  • Определите, можно ли преобразовать строки в числа

Для методов, отличных от isascii(), строка, содержащая пустую строку, следующие символы и т.д., является ложной.

  • ,
  • .
  • -

-1.23 и т.д., как числовое значение, объясняется в конце этого раздела.

Регулярные выражения можно использовать для более гибкого определения типов символов и извлечения соответствующих типов символов.

См. следующую статью для получения дополнительной информации о том, как определить следующее

  • Как преобразовать числовую строку (str) в число (int, float)
  • Как определить верхний и нижний регистр

Определяет, является ли строка десятичной цифрой: 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(). Ошибка для строк, которые не могут быть преобразованы.

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
Copied title and URL