Compruebe si la cadena contiene solo espacios en blanco

219

¿Cómo puedo probar si una cadena contiene solo espacios en blanco?

Cadenas de ejemplo:

  • " " (espacio, espacio, espacio)

  • " \t \n " (espacio, tabulación, espacio, nueva línea, espacio)

  • "\n\n\n\t\n" (nueva línea, nueva línea, nueva línea, pestaña, nueva línea)

bodacydo
fuente

Respuestas:

312

Usa el str.isspace()método:

Regrese Truesi solo hay caracteres de espacio en blanco en la cadena y hay al menos un carácter, de lo Falsecontrario.

Un carácter es un espacio en blanco si en la base de datos de caracteres Unicode (ver unicodedata ), o su categoría general es Zs ("Separador, espacio"), o su clase bidireccional es WS, B o S.

Combina eso con un caso especial para manejar la cadena vacía.

Alternativamente, puede usar str.strip()y verificar si el resultado está vacío.

Vladislav
fuente
Esto falla en Python 2.4 si la cadena contiene un espacio ininterrumpido, charcode U+00A0o ALT+160. Sin embargo, parece arreglado en Python 2.7.
Kumba
18
Tenga en cuenta que esto no verifica None, o''
Parth Mehrotra
1
En python 2.7.13, isspace () considerará el espacio sin interrupción como un espacio. ¡Agradable!
Iching Chang
Es posible que también desee excluir cadenas vacías, en ese caso puede hacer:if len(str) == 0 or str.isspace():
Joe
@Joe len(my_str) == 0también se puede escribir not my_str.
AMC hace
55
>>> tests = ['foo', ' ', '\r\n\t', '', None]
>>> [not s or s.isspace() for s in tests]
[False, True, True, True, True]
John Machin
fuente
¿Por qué la opción de tener que volver Truea None?
AMC hace
32

Quieres usar el isspace()método

str. isspace ()

Devuelve verdadero si solo hay caracteres de espacio en blanco en la cadena y hay al menos un carácter, falso de lo contrario.

Eso se define en cada objeto de cadena. Aquí hay un ejemplo de uso para su caso de uso específico:

if aStr and (not aStr.isspace()):
    print aStr
Eric Wang
fuente
¿No es esta la misma solución que la respuesta actual y aceptada ?
AMC hace
6

Verifique la longitud de la lista dada por el método split ().

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

O compare la salida del método strip () con nulo.

if your_string.strip() == '':
     print("yes")
Bhavesh Munot
fuente
1
No hay razón para dividir la cadena, len()funciona en cadenas. Además, el OP no pedía probar la cadena vacía, sino una cadena que fuera todos los espacios. Sin embargo, tu segundo método no es malo. Además, sus padres que rodean el condicional no son necesarios en Python.
NeilK
1
Por extraño que parezca, el primer método es en realidad una buena forma de verificar que ninguno de los personajes son espacios, si lo reemplaza ==0con==1
Mad Physicist
if len(your_string.split())==0:-> if not your_string.split():, if your_string.strip() == '':-> if not your_string.strip():. En cualquier caso, el primero es inferior a las soluciones existentes, y el segundo ya se ha mencionado en otras respuestas.
AMC hace
3

Aquí hay una respuesta que debería funcionar en todos los casos:

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

Si la variable es Ninguna, se detendrá en not sy no evaluará más (desde not None == True). Aparentemente, el strip()método se ocupa de los casos habituales de tabulación, nueva línea, etc.

Fralau
fuente
ya quenot None == True probablemente sea más claro decirlo None is False. Además, ==no debe usarse para estas comparaciones.
AMC hace
2

Supongo que en su escenario, una cadena vacía es una cadena que está realmente vacía o que contiene todo el espacio en blanco.

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

Tenga en cuenta que esto no verifica None

James Wierzba
fuente
¿No ha sido esto cubierto por las respuestas existentes?
AMC hace
2

Solía ​​seguir:

if str and not str.isspace():
  print('not null and not empty nor whitespace')
else:
  print('null or empty or whitespace')
Emdadul Sawon
fuente
null ¿Quieres decir None?
AMC hace
1

Para verificar si una cadena es solo un espacio o una nueva línea

Usa este código 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
fuente
1

La semejanza con el método estático de cadena c # esNullOrWhiteSpace.

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
banda ancha
fuente
Puedes simplementereturn (str is None) or (str == "") or (str.isspace())
Alexander - Reincorporar a Monica el
Ah, y tanto Noney ""son Falsy, lo que sólo puede:return not str or str.isspace()
Alexander - Restablecer Mónica
Esto es bastante unidiomático.
AMC hace
@AMC podrías explicar esto, no entiendo qué estás tratando de decir.
banda ancha hace