Controlla se la stringa contiene solo spazi bianchi


220

Come posso verificare se una stringa contiene solo spazi bianchi?

Stringhe di esempio:

  • " " (spazio, spazio, spazio)

  • " \t \n " (spazio, tab, spazio, newline, spazio)

  • "\n\n\n\t\n" (newline, newline, newline, tab, newline)

Risposte:


312

Usa il str.isspace()metodo:

Restituisce Truese nella stringa sono presenti solo caratteri bianchi e in caso Falsecontrario almeno un carattere .

Un carattere è uno spazio se nel database dei caratteri Unicode (vedi unicodedata ), la sua categoria generale è Zs ("Separatore, spazio") o la sua classe bidirezionale è una di WS, B o S.

Combinalo con un caso speciale per la gestione della stringa vuota.

In alternativa, è possibile utilizzare str.strip()e verificare se il risultato è vuoto.


Ciò fallisce in Python 2.4 se la stringa contiene uno spazio non interrompibile, un charcode U+00A0o ALT+160. Sembra risolto in Python 2.7, tuttavia.
Kumba,

18
Tieni presente che questo non controlla None, oppure''
Parth Mehrotra,

1
In python 2.7.13, isspace () considererà lo spazio non-break come uno spazio. Bello!
Iching Chang,

Potresti anche voler escludere stringhe vuote, in tal caso puoi fare:if len(str) == 0 or str.isspace():
Joe

@Joe len(my_str) == 0può anche essere scritto 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]

Perché la scelta di averlo tornare Trueper None?
AMC,

32

Vuoi usare il isspace()metodo

str. isspace ()

Restituisce vero se nella stringa sono presenti solo spazi bianchi e almeno un carattere, altrimenti falso.

Questo è definito su ogni oggetto stringa. Ecco un esempio di utilizzo per il tuo caso d'uso specifico:

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

Questa non è la stessa soluzione dell'attuale risposta accettata ?
AMC,



6

Controlla la lunghezza della lista data dal metodo split ().

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

Oppure Confronta l'output del metodo strip () con null.

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

1
Non c'è motivo di dividere la stringa, len()funziona su stringhe. Inoltre, l'OP non chiedeva di testare la stringa vuota, ma una stringa che fosse tutta spazio. Il tuo secondo metodo non è male però. Inoltre, le tue parentesi che circondano il condizionale non sono necessarie in Python.
NeilK,

1
Stranamente, il primo metodo è in realtà un buon modo per verificare che nessuno dei personaggi sia uno spazio, se lo sostituisci ==0con==1
Mad Physicist

if len(your_string.split())==0:-> if not your_string.split():, if your_string.strip() == '':-> if not your_string.strip():. In ogni caso, il primo è inferiore alle soluzioni esistenti e il secondo è già stato menzionato in altre risposte.
AMC,

3

Ecco una risposta che dovrebbe funzionare in tutti i casi:

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

Se la variabile è Nessuna, si fermerà a not se non valuterà più (da allora not None == True). Apparentemente, il strip()metodo si occupa dei soliti casi di tab, newline, ecc.


poichénot None == True è probabilmente più chiaro dirlo None is False. Inoltre, ==non dovrebbe essere usato per questi confronti.
AMC,

2

Presumo nel tuo scenario, una stringa vuota è una stringa che è veramente vuota o che contiene tutto lo spazio bianco.

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

Nota che questo non controlla None


Questo non è già stato coperto dalle risposte esistenti?
AMC,

2

Ho usato il seguente:

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

null Intendi None?
AMC,

1

Per verificare se una stringa è solo uno spazio o una nuova riga

Usa questo semplice codice

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 somiglianza con il metodo statico stringa c # isNullOrWhiteSpace.

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

Puoi soloreturn (str is None) or (str == "") or (str.isspace())
Alexander - Ripristinare Monica il

Oh, ed entrambi Nonee ""sono falsi, quindi puoi semplicemente:return not str or str.isspace()
Alexander - Ripristinare Monica il

Questo è abbastanza unidiomatico.
AMC,

@AMC potresti spiegarlo, non capisco cosa stai cercando di dire.
banda larga
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.