Verifique se a string contém apenas espaço em branco

219

Como posso testar se uma string contém apenas espaço em branco?

Exemplos de strings:

  • " " (espaço, espaço, espaço)

  • " \t \n " (espaço, tabulação, espaço, nova linha, espaço)

  • "\n\n\n\t\n" (nova linha, nova linha, nova linha, guia, nova linha)

bodacydo
fonte

Respostas:

312

Use o str.isspace()método:

Retorne Truese houver apenas caracteres de espaço em branco na string e houver pelo menos um caractere, Falsecaso contrário.

Um caractere é um espaço em branco se, no banco de dados de caracteres Unicode (consulte unicodedata ), sua categoria geral for Zs (“Separador, espaço”) ou sua classe bidirecional for WS, B ou S.

Combine isso com um caso especial para manipular a string vazia.

Como alternativa, você pode usar str.strip()e verificar se o resultado está vazio.

Vladislav
fonte
Isso falhará no Python 2.4 se a string contiver um espaço, um código U+00A0ou um código sem quebra ALT+160. Parece corrigido no Python 2.7, no entanto.
Kumba
18
Tenha em mente que isso não verifica None, ou''
Parth Mehrotra
1
No python 2.7.13, o isspace () considerará o espaço sem quebra como um espaço. Agradável!
Iching Chang
Você também pode excluir cadeias de caracteres vazias, nesse caso, você pode fazer:if len(str) == 0 or str.isspace():
Joe
@ Joe len(my_str) == 0também pode ser escrito 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
fonte
Por que a opção de tê-lo voltar Truepara None?
AMC
32

Você quer usar o isspace()método

str. isspace ()

Retorne true se houver apenas caracteres de espaço em branco na string e houver pelo menos um caractere, caso contrário, false.

Isso é definido em cada objeto de string. Aqui está um exemplo de uso para seu caso de uso específico:

if aStr and (not aStr.isspace()):
    print aStr
Eric Wang
fonte
Essa não é a mesma solução que a resposta atual superior e aceita ?
AMC
25

Você pode usar o str.isspace()método

SilentGhost
fonte
6

Verifique o comprimento da lista fornecida pelo método split ().

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

Ou Compare a saída do método strip () com null.

if your_string.strip() == '':
     print("yes")
Bhavesh Munot
fonte
1
Não há razão para dividir a string, len()funciona em strings. Além disso, o OP não estava pedindo para testar a sequência vazia, mas a sequência que era todos os espaços. Seu segundo método não é ruim. Além disso, suas parênteses em torno do condicional não são necessárias em python.
NeilK 16/06
1
Curiosamente, o primeiro método é realmente uma boa maneira de verificar que nenhum dos personagens são espaços, se você substituir ==0com==1
Mad Físico
if len(your_string.split())==0:-> if not your_string.split():, if your_string.strip() == '':-> if not your_string.strip():. De qualquer forma, a primeira é inferior às soluções existentes e a segunda já foi mencionada em outras respostas.
AMC
3

Aqui está uma resposta que deve funcionar em todos os casos:

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

Se a variável for None, ela irá parar em not se não avaliar mais (desde not None == True). Aparentemente, o strip()método cuida dos casos usuais de tab, nova linha etc.

fralau
fonte
já quenot None == True provavelmente é mais claro apenas dizer None is False. Além disso, ==não deve ser usado para essas comparações.
AMC
2

Suponho que, no seu cenário, uma string vazia seja verdadeiramente vazia ou que contenha todo o espaço em branco.

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

Observe que isso não verifica se há None

James Wierzba
fonte
Isso já não foi coberto pelas respostas existentes?
AMC
2

Eu usei o seguinte:

if str and not str.isspace():
  print('not null and not empty nor whitespace')
else:
  print('null or empty or whitespace')
Emdadul Sawon
fonte
null Você quer dizer None?
AMC
1

Para verificar se uma sequência é apenas um espaço ou uma nova linha

Use este código simples

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
fonte
1

A semelhança com o método estático da string c # éNullOrWhiteSpace.

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 larga
fonte
Você pode apenasreturn (str is None) or (str == "") or (str.isspace())
Alexander - Reinstate Monica
Ah, e ambos Nonee ""são falsos, então você pode:return not str or str.isspace()
Alexander - Restabelecer Monica
Isso é bastante unidiático.
AMC
@AMC você poderia elaborar isso, eu não entendo o que você está tentando dizer.
banda larga