Python détermine et vérifie si une chaîne de caractères est numérique ou alphabétique.

Affaires

Python fournit plusieurs méthodes de chaîne de caractères pour déterminer et vérifier si un type de chaîne est numérique ou alphabétique.

Chaque méthode est expliquée à l'aide d'un exemple de code.

  • Détermine si une chaîne est un chiffre décimal:str.isdecimal()
  • Déterminer si une chaîne de caractères est un nombre:str.isdigit()
  • Détermine si une chaîne de caractères est un caractère représentant un nombre.:str.isnumeric()
  • Détermine si la chaîne est alphabétique:str.isalpha()
  • Déterminer si la chaîne est alphanumérique:str.isalnum()
  • Détermine si les chaînes de caractères sont des caractères ASCII.:str.isascii()
  • Jugement de la chaîne vide
  • Déterminer si les chaînes de caractères peuvent être converties en nombres

Pour les méthodes autres que isascii(), une chaîne contenant une chaîne vide, les symboles suivants, etc. est fausse.

  • ,
  • .
  • -

-1,23, etc., en tant que valeur numérique est expliqué à la fin de cette section.

Les expressions régulières peuvent être utilisées pour déterminer les types de caractères de manière plus souple et pour extraire les types de caractères pertinents.

Voir l'article suivant pour plus d'informations sur la façon de déterminer les éléments suivants

  • Comment convertir une chaîne numérique (str) en un nombre (int, float)
  • Comment déterminer les majuscules et les minuscules

Détermine si une chaîne est un chiffre décimal: str.isdecimal()

Dans isdecimal(), c'est vrai si tous les caractères sont des chiffres décimaux, c'est-à-dire des caractères de la catégorie générale Nd d'Unicode. C'est également vrai pour les chiffres arabes pleine largeur, 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 elle contient un symbole tel que le signe moins ou un point, elle est fausse. Par exemple, si vous voulez déterminer qu'une chaîne de caractères telle que '-1.23' est une valeur numérique, vous pouvez utiliser le traitement des exceptions. Cette méthode est expliquée à la fin de cette section.

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

Déterminer si une chaîne de caractères est un nombre: str.isdigit()

Dans isdigit(), en plus des nombres qui sont vrais dans isdecimal(), les nombres dont la valeur de la propriété Unicode Numeric_Type est Digit ou Decimal sont également vrais.

Par exemple, un nombre en exposant représentant un carré est faux dans isdecimal() mais vrai dans isdigit().

  • nombre en exposant représentant le carré
    • ²
    • '\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

Détermine si une chaîne de caractères est un caractère représentant un nombre.: str.isnumeric()

Dans isnumeric(), en plus des nombres qui sont vrais dans isdigit(), les nombres dont la valeur de la propriété Unicode Numeric_Type est Numeric sont également vrais.

Les fractions, les chiffres romains et les chiffres chinois sont également vrais.

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

Détermine si la chaîne est alphabétique: str.isalpha()

Dans isalpha(), une propriété de catégorie générale Unicode avec l'un des éléments suivants est vraie.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

L'alphabet, les caractères chinois, etc. seront vrais.

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

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

Les chiffres arabes sont faux, mais les chiffres chinois sont vrais car ils sont aussi des caractères chinois ; cependant, les zéros des chiffres chinois sont faux.

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

Les chiffres romains sont faux.

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

Déterminer si la chaîne est alphanumérique: str.isalnum()

Dans isalnum(), il est vrai si chaque caractère est vrai dans l'une des méthodes énumérées jusqu'à présent.

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

Chaque caractère est évalué individuellement, ainsi une chaîne contenant des lettres et des chiffres sera vraie dans isalnum() même si elle est fausse dans toutes les autres méthodes.

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

Détermine si les chaînes de caractères sont des caractères ASCII.: str.isascii()

Python 3.7 a ajouté isascii(). Elle renvoie vrai si tous les caractères de la chaîne sont des caractères ASCII.

Outre les chiffres et les lettres, les symboles tels que + et – sont également vrais.

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

Les hiragana et autres caractères non ASCII sont faux.

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

Comme nous le verrons ensuite, contrairement aux autres méthodes, isascii() renvoie vrai même pour une chaîne vide.

Jugement de la chaîne vide

Une chaîne vide est vraie pour isascii() et fausse pour les autres méthodes.

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

Utilisez bool() pour déterminer s'il s'agit d'une chaîne vide. La valeur de retour est false pour une chaîne vide et true sinon.

print(bool(''))
# False

print(bool('abc123'))
# True

Déterminer si les chaînes de caractères peuvent être converties en nombres

Les chaînes de valeurs négatives ou fractionnaires contiennent des points ou des signes moins. Par conséquent, le résultat est faux pour toutes les méthodes sauf isascii().

Bien que vrai pour isascii(), il ne convient pas pour déterminer si une chaîne de caractères peut être convertie en une valeur numérique, puisqu'il est vrai même si elle contient d'autres symboles ou des caractères alphabétiques.

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

Les chaînes de caractères peuvent être converties en nombres à virgule flottante avec float(). Erreur pour les chaînes de caractères qui ne peuvent pas être converties.

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

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

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

Avec la gestion des exceptions, on peut définir une fonction qui renvoie vrai lorsqu'une chaîne peut être convertie avec 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 vous voulez déterminer qu'un nombre séparé par une virgule est également vrai, utilisez replace() pour supprimer la virgule (et la remplacer par une chaîne vide).

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 vous voulez prendre en charge la délimitation des espaces blancs, vous pouvez utiliser replace() plus loin.

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