Vérifiez si la chaîne ne contient que des espaces


220

Comment puis-je tester si une chaîne ne contient que des espaces?

Exemples de chaînes:

  • " " (espace, espace, espace)

  • " \t \n " (espace, tabulation, espace, nouvelle ligne, espace)

  • "\n\n\n\t\n" (nouvelle ligne, nouvelle ligne, nouvelle ligne, tabulation, nouvelle ligne)

Réponses:


312

Utilisez la str.isspace()méthode:

Renvoie Trues'il n'y a que des espaces dans la chaîne et s'il y a au moins un caractère, Falsesinon.

Un caractère est un espace si dans la base de données de caractères Unicode (voir unicodedata ), soit sa catégorie générale est Zs («Séparateur, espace»), soit sa classe bidirectionnelle est WS, B ou S.

Combinez cela avec un cas spécial pour gérer la chaîne vide.

Alternativement, vous pouvez utiliser str.strip()et vérifier si le résultat est vide.


Cela échoue dans Python 2.4 si la chaîne contient un espace insécable, charcode U+00A0ou ALT+160. Semble fixe dans Python 2.7, cependant.
Kumba

18
Gardez à l'esprit que cela ne vérifie pas None, ou''
Parth Mehrotra

1
En python 2.7.13, isspace () considérera l'espace insécable comme un espace. Agréable!
Iching Chang

Vous pouvez également exclure les chaînes vides, dans ce cas, vous pouvez faire:if len(str) == 0 or str.isspace():
Joe

@Joe len(my_str) == 0peut également être écrit not my_str.
AMC

55
>>> tests = ['foo', ' ', '\r\n\t', '', None]
>>> [not s or s.isspace() for s in tests]
[False, True, True, True, True]

Pourquoi le choix de l' avoir de retour Truepour None?
AMC

32

Vous souhaitez utiliser la isspace()méthode

str. isspace ()

Renvoie vrai s'il n'y a que des espaces dans la chaîne et s'il y a au moins un caractère, faux sinon.

Cela est défini sur chaque objet chaîne. Voici un exemple d'utilisation pour votre cas d'utilisation spécifique:

if aStr and (not aStr.isspace()):
    print aStr

N'est-ce pas la même solution que la réponse actuelle et acceptée ?
AMC



6

Vérifiez la longueur de la liste donnée par la méthode split ().

if len(your_string.split()==0:
     print("yes")

Ou Comparez la sortie de la méthode strip () avec null.

if your_string.strip() == '':
     print("yes")

1
Il n'y a aucune raison de diviser la chaîne, len()fonctionne sur les chaînes. De plus, l'OP ne demandait pas de tester la chaîne vide, mais une chaîne contenant tous les espaces. Cependant, votre deuxième méthode n'est pas mauvaise. De plus, vos parens entourant le conditionnel ne sont pas nécessaires en python.
NeilK

1
Curieusement, la première méthode est en fait un bon moyen de vérifier qu'aucun des personnages n'est un espace, si vous remplacez ==0par==1
Mad Physicist

if len(your_string.split())==0:-> if not your_string.split():, if your_string.strip() == '':-> if not your_string.strip():. En tout cas, la première est inférieure aux solutions existantes, et la seconde a déjà été mentionnée dans d'autres réponses.
AMC

3

Voici une réponse qui devrait fonctionner dans tous les cas:

def is_empty(s):
    "Check whether a string is empty"
    return not s or not s.strip()

Si la variable est None, elle s'arrêtera à not set n'évaluera plus (depuis not None == True). Apparemment, la strip()méthode prend en charge les cas habituels de tabulation, de nouvelle ligne, etc.


carnot None == True il est probablement plus clair de dire None is False. En outre, ==ne doivent pas être utilisés pour ces comparaisons.
AMC

2

Je suppose que dans votre scénario, une chaîne vide est une chaîne qui est vraiment vide ou qui contient tout l'espace blanc.

if(str.strip()):
    print("string is not empty")
else:
    print("string is empty")

Notez que cela ne vérifie pas None


N'est-ce pas déjà couvert par les réponses existantes?
AMC

2

J'ai utilisé ce qui suit:

if str and not str.isspace():
  print('not null and not empty nor whitespace')
else:
  print('null or empty or whitespace')

null Voulez-vous dire None?
AMC

1

Pour vérifier si une chaîne n'est qu'un espace ou une nouvelle ligne

Utilisez ce code simple

mystr = "      \n  \r  \t   "
if not mystr.strip(): # The String Is Only Spaces!
    print("\n[!] Invalid String !!!")
    exit(1)
mystr = mystr.strip()
print("\n[*] Your String Is: "+mystr)

1

La ressemblance avec la méthode statique de chaîne c # estNullOrWhiteSpace.

def isNullOrWhiteSpace(str):
  """Indicates whether the specified string is null or empty string.
     Returns: True if the str parameter is null, an empty string ("") or contains 
     whitespace. Returns false otherwise."""
  if (str is None) or (str == "") or (str.isspace()):
    return True
  return False

isNullOrWhiteSpace(None) -> True // None equals null in c#, java, php
isNullOrWhiteSpace("")   -> True
isNullOrWhiteSpace(" ")  -> True

Vous pouvez simplementreturn (str is None) or (str == "") or (str.isspace())
Alexander - Rétablir Monica

Oh, et les deux Noneet ""sont falsy, vous pouvez simplement:return not str or str.isspace()
Alexander - Réintégrer Monica

C'est tout à fait unidiomatique.
AMC

@AMC pourriez-vous élaborer cela, je ne comprends pas ce que vous essayez de dire.
haut débit le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.