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)

Bodacydo
la source

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.

Vladislav
la source
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]
John Machin
la source
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
Eric Wang
la source
N'est-ce pas la même solution que la réponse actuelle et acceptée ?
AMC
25

Vous pouvez utiliser la str.isspace()méthode.

SilentGhost
la source
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")
Bhavesh Munot
la source
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.

fralau
la source
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

James Wierzba
la source
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')
Emdadul Sawon
la source
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)
Ahmed
la source
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
haut débit
la source
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