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
- RELATION :Conversion d'une chaîne de chiffres en valeurs numériques en Python
- RELATION :Liste des méthodes de chaîne de caractères pour manipuler la casse en Python
- 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
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