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
- RELACIONADO:Convertir una cadena de números en valores numéricos en Python
- RELACIONADO:Lista de métodos de cadena para manipular case en Python
- 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
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