Python determina y comprueba si una cadena es numérica o alfabética

Negocio

Python proporciona varios métodos de cadena para determinar y comprobar si un tipo de cadena es numérico o alfabético.

Cada método se explica con un código de ejemplo.

  • Determina si una cadena es un dígito decimal:str.isdecimal()
  • Determinar si una cadena es un número:str.isdigit()
  • Determina si una cadena es un carácter que representa un número:str.isnumeric()
  • Determina si la cadena es alfabética:str.isalpha()
  • Determinar si la cadena es alfanumérica:str.isalnum()
  • Determina si las cadenas son caracteres ASCII:str.isascii()
  • Juicio de la cadena vacía
  • Determinar si las cadenas se pueden convertir en números

Para los métodos distintos de isascii(), una cadena que contenga una cadena vacía, los siguientes símbolos, etc., es falsa.

  • ,
  • .
  • -

-1,23, etc., como valor numérico se explica al final de esta sección.

Las expresiones regulares pueden utilizarse para determinar los tipos de caracteres de forma más flexible y para extraer los tipos de caracteres pertinentes.

Consulte el siguiente artículo para obtener más información sobre cómo determinar lo siguiente

  • Cómo convertir una cadena numérica (str) en un número (int, float)
  • Cómo determinar las mayúsculas y minúsculas

Determina si una cadena es un dígito decimal: str.isdecimal()

En isdecimal(), es verdadero si todos los caracteres son dígitos decimales, es decir, caracteres de la categoría general Nd de Unicode. También es cierto para los números arábigos de ancho completo, etc.

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

Si contiene un símbolo como un signo menos o un punto, es falso. Por ejemplo, si quiere determinar que una cadena como '-1,23' es un valor numérico, puede utilizar el manejo de excepciones. Esto se explica al final de esta sección.

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

Determinar si una cadena es un número: str.isdigit()

En isdigit(), además de los números que son verdaderos en isdecimal(), también son verdaderos los números cuyo valor de la propiedad Unicode Numeric_Type es Digit o Decimal.

Por ejemplo, un número superíndice que representa un cuadrado es falso en isdecimal() pero verdadero en isdigit().

  • número de superíndice que representa el cuadrado
    • ²
    • '\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

Determina si una cadena es un carácter que representa un número: str.isnumeric()

En isnumeric(), además de los números que son verdaderos en isdigit(), también son verdaderos los números cuyo valor de propiedad Unicode Numeric_Type es Numeric.

También lo son las fracciones, los números romanos y los números chinos.

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

Determina si la cadena es alfabética: str.isalpha()

En isalpha(), una propiedad de categoría general de Unicode con una de las siguientes es verdadera.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

El alfabeto, los caracteres chinos, etc. serán verdaderos.

s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True

s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True

Los números arábigos son falsos, pero los números chinos son verdaderos porque también son caracteres chinos; sin embargo, los ceros de los números chinos son falsos.

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

Los números romanos son falsos.

s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False

Determinar si la cadena es alfanumérica: str.isalnum()

En isalnum(), es verdadero si cada carácter es verdadero en cualquiera de los siguientes métodos enumerados hasta ahora.

  • isdecimal()
  • isdigit()
  • isnumeric()
  • isalpha()

Cada carácter se evalúa individualmente, por lo que una cadena que contenga letras y números será verdadera en isalnum() aunque sea falsa en todos los demás métodos.

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

Determina si las cadenas son caracteres ASCII: str.isascii()

Python 3.7 añadió isascii(). Devuelve true si todos los caracteres de la cadena son caracteres ASCII.

Además de los números y las letras, también son válidos los símbolos como + y -.

s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False

El hiragana no ASCII y otros caracteres son falsos.

s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True

Como veremos a continuación, a diferencia de los otros métodos, isascii() devuelve true incluso para una cadena vacía.

Juicio de la cadena vacía

Una cadena vacía es verdadera para isascii() y falsa para los otros métodos.

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

Utilice bool() para determinar si es una cadena vacía. El valor de retorno es falso para una cadena vacía y verdadero en caso contrario.

print(bool(''))
# False

print(bool('abc123'))
# True

Determinar si las cadenas se pueden convertir en números

Las cadenas de valores negativos o fraccionarios contienen puntos o signos de menos. Por lo tanto, el resultado es falso para todos los métodos excepto isascii().

Aunque es verdadera para isascii(), no es adecuada para determinar si una cadena puede convertirse en un valor numérico, ya que es verdadera aunque contenga otros símbolos o caracteres alfabéticos.

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

Las cadenas pueden ser convertidas a números de punto flotante con float(). Error para las cadenas que no se pueden convertir.

print(float('-1.23'))
# -1.23

print(type(float('-1.23')))
# <class 'float'>

# print(float('abc'))
# ValueError: could not convert string to float: 'abc'

Con el manejo de excepciones, se puede definir una función que devuelva true cuando una cadena pueda ser convertida con 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

Si quiere determinar que un número separado por comas también es verdadero, utilice replace() para eliminar la coma (sustituirla por una cadena vacía).

def is_num_delimiter(s):
    try:
        float(s.replace(',', ''))
    except ValueError:
        return False
    else:
        return True

print(is_num_delimiter('10,000,000'))
# True

Si desea admitir la delimitación de espacios en blanco, puede utilizar replace() además.

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