Sprawdź, czy łańcuch zawiera tylko białe znaki


220

Jak mogę sprawdzić, czy ciąg znaków zawiera tylko białe znaki?

Przykładowe ciągi:

  • " " (przestrzeń, przestrzeń, przestrzeń)

  • " \t \n " (spacja, tabulacja, spacja, nowa linia, spacja)

  • "\n\n\n\t\n" (nowa linia, nowa linia, nowa linia, karta, nowa linia)

Odpowiedzi:


312

Użyj str.isspace()metody:

Zwróć, Truejeśli w ciągu znajdują się tylko znaki spacji i co najmniej jeden znak,False przeciwnym razie.

Znak jest spacją, jeśli w bazie danych znaków Unicode (patrz unicodedata ) albo jego ogólną kategorią jest Zs („Separator, spacja”), albo jego dwukierunkowa klasa to WS, B lub S.

Połącz to ze specjalnym przypadkiem do obsługi pustego ciągu.

Alternatywnie możesz użyć str.strip()i sprawdzić, czy wynik jest pusty.


Nie powiedzie się to w Pythonie 2.4, jeśli ciąg znaków zawiera nieprzerwaną spację, kod znaków U+00A0lub ALT+160. Wygląda jednak na naprawiony w Pythonie 2.7.
Kumba

18
Należy pamiętać, że to nie sprawdza None, lub''
Parth Mehrotra

1
W Pythonie 2.7.13, isspace () będzie traktować spację nierozdzielającą jako spację. Miły!
Iching Chang,

Możesz również wykluczyć puste ciągi, w takim przypadku możesz zrobić:if len(str) == 0 or str.isspace():
Joe

@Joe len(my_str) == 0można również napisać 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]

Dlaczego wybór mieć to powrót Truedo None?
AMC

32

Chcesz użyć tej isspace()metody

str. isspace ()

Zwraca wartość true, jeśli w ciągu znajdują się tylko znaki spacji i co najmniej jeden znak, w przeciwnym razie wartość false.

To jest zdefiniowane na każdym obiekcie łańcuchowym. Oto przykład użycia dla konkretnego przypadku użycia:

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

Czy to nie to samo rozwiązanie, co obecna najwyższa i zaakceptowana odpowiedź ?
AMC



6

Sprawdź długość listy podaną za pomocą metody split ().

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

Lub Porównaj wynik metody strip () z wartością null.

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

1
Nie ma powodu do dzielenia łańcucha, len()działa na łańcuchach. Ponadto OP nie poprosił o przetestowanie pustego łańcucha, ale łańcucha zawierającego wszystkie spacje. Twoja druga metoda nie jest jednak zła. Ponadto, twoje pareny otaczające warunkowe nie są potrzebne w Pythonie.
NeilK

1
O dziwo, pierwsza metoda jest w rzeczywistości dobrym sposobem na sprawdzenie, niż żadna z postaci nie jest spacją, jeśli zastąpisz ==0==1
Szalony fizyk

if len(your_string.split())==0:-> if not your_string.split():, if your_string.strip() == '':-> if not your_string.strip():. W każdym razie pierwsze jest gorsze od istniejących rozwiązań, a drugie zostało już wspomniane w innych odpowiedziach.
AMC

3

Oto odpowiedź, która powinna działać we wszystkich przypadkach:

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

Jeśli zmienna to None, zatrzyma się na not si nie będzie dalej oceniać (od not None == True). Najwyraźniej strip()metoda zajmuje się zwykłymi przypadkami tabulacji, nowej linii itp.


ponieważnot None == True prawdopodobnie jest to łatwiejsze do powiedzenia None is False. Nie ==należy również używać do tych porównań.
AMC

2

Zakładam, że w twoim scenariuszu pusty ciąg jest naprawdę pusty lub zawiera wszystkie białe znaki.

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

Pamiętaj, że to nie sprawdza None


Czy nie zostało to już uwzględnione w istniejących odpowiedziach?
AMC

2

Użyłem następujących:

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

null Czy masz na myśli None?
AMC

1

Aby sprawdzić, czy ciąg znaków jest tylko spacją lub znakiem nowej linii

Użyj tego prostego kodu

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

Podobieństwo do metody statycznej typu c # string toNullOrWhiteSpace.

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

Możesz po prostureturn (str is None) or (str == "") or (str.isspace())
Alexander - przywrócić Monikę

Aha, i oba Nonei ""są falsy, więc można po prostu:return not str or str.isspace()
Alexander - dozbrojenie Monica

To jest dość jednoznaczne.
AMC

@AMC mógłbyś to rozwinąć, nie rozumiem, co próbujesz powiedzieć.
Internet szerokopasmowy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.