Überprüfen Sie, ob die Zeichenfolge nur Leerzeichen enthält


218

Wie kann ich testen, ob eine Zeichenfolge nur Leerzeichen enthält?

Beispielzeichenfolgen:

  • " " (Raum, Raum, Raum)

  • " \t \n " (Leerzeichen, Tabulator, Leerzeichen, Zeilenumbruch, Leerzeichen)

  • "\n\n\n\t\n" (Newline, Newline, Newline, Tab, Newline)

Antworten:


312

Verwenden Sie die str.isspace()Methode:

Rückgabe, Truewenn die Zeichenfolge nur Leerzeichen enthält und Falseandernfalls mindestens ein Zeichen .

Ein Zeichen ist ein Leerzeichen, wenn in der Unicode-Zeichendatenbank (siehe Unicodedata ) entweder seine allgemeine Kategorie Zs („Separator, Leerzeichen“) oder seine bidirektionale Klasse WS, B oder S ist.

Kombinieren Sie dies mit einem Sonderfall für die Behandlung der leeren Zeichenfolge.

Alternativ können Sie verwenden str.strip()und prüfen, ob das Ergebnis leer ist.


Dies schlägt in Python 2.4 fehl, wenn die Zeichenfolge ein nicht unterbrechendes Leerzeichen, einen Zeichencode U+00A0oder enthält ALT+160. Sieht jedoch in Python 2.7 behoben aus.
Kumba

18
Denken Sie daran, dass dies nicht überprüft wird None, oder''
Parth Mehrotra

1
In Python 2.7.13 betrachtet isspace () nicht unterbrechendes Leerzeichen als Leerzeichen. Nett!
Iching Chang

Möglicherweise möchten Sie auch leere Zeichenfolgen ausschließen. In diesem Fall können Sie Folgendes tun:if len(str) == 0 or str.isspace():
Joe,

@ Joe len(my_str) == 0kann auch geschrieben werden 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]

Warum die Wahl, es zurückgeben Truezu lassen None?
AMC

32

Sie möchten die isspace()Methode verwenden

str. isspace ()

Geben Sie true zurück, wenn die Zeichenfolge nur Leerzeichen enthält und mindestens ein Zeichen vorhanden ist, andernfalls false.

Das ist für jedes String-Objekt definiert. Hier ist ein Anwendungsbeispiel für Ihren speziellen Anwendungsfall:

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

Ist dies nicht die gleiche Lösung wie die aktuelle Top- und akzeptierte Antwort ?
AMC



6

Überprüfen Sie die Länge der Liste mit der Methode split ().

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

Oder Vergleichen Sie die Ausgabe der strip () -Methode mit null.

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

1
Es gibt keinen Grund, die Zeichenfolge zu teilen, len()arbeitet an Zeichenfolgen. Außerdem bat das OP nicht darum, nach der leeren Zeichenfolge zu testen, sondern nach einer Zeichenfolge, die nur aus Leerzeichen bestand. Ihre zweite Methode ist jedoch nicht schlecht. Außerdem werden Ihre Parens, die die Bedingung umgeben, in Python nicht benötigt.
NeilK

1
Merkwürdigerweise ist die erste Methode tatsächlich eine gute Möglichkeit zu überprüfen , als keines der Zeichen Räume, wenn Sie ersetzen ==0mit==1
Mad Physikerin

if len(your_string.split())==0:-> if not your_string.split():, if your_string.strip() == '':-> if not your_string.strip():. In jedem Fall ist die erste den vorhandenen Lösungen unterlegen, und die zweite wurde bereits in anderen Antworten erwähnt.
AMC

3

Hier ist eine Antwort, die in allen Fällen funktionieren sollte:

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

Wenn die Variable None ist, stoppt sie bei not sund wird (seit not None == True) nicht weiter ausgewertet . Anscheinend strip()kümmert sich die Methode um die üblichen Fälle von Tabulatoren, Zeilenumbrüchen usw.


da istnot None == True es wohl klarer nur zu sagen None is False. Sollte auch ==nicht für diese Vergleiche verwendet werden.
AMC

2

Ich gehe in Ihrem Szenario davon aus, dass eine leere Zeichenfolge eine Zeichenfolge ist, die wirklich leer ist oder die alle Leerzeichen enthält.

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

Beachten Sie, dass dies nicht überprüft wird None


Wurde dies nicht bereits durch bestehende Antworten abgedeckt?
AMC

2

Ich habe folgendes verwendet:

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

null Meinst du None?
AMC

1

Um zu überprüfen, ob eine Zeichenfolge nur ein Leerzeichen oder eine neue Zeile ist

Verwenden Sie diesen einfachen Code

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

Ähnlichkeit mit der statischen Methode c # string 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

Sie können nurreturn (str is None) or (str == "") or (str.isspace())
Alexander - Monica

Oh, und beide Noneund ""sind falsch, also können Sie einfach:return not str or str.isspace()
Alexander - Monica

Das ist ziemlich unidiomatisch.
AMC

@AMC könnten Sie dies näher erläutern, ich verstehe nicht, was Sie sagen wollen.
Breitband vor
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.