Ü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)

bodacydo
quelle

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.

Vladislav
quelle
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]
John Machin
quelle
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
Eric Wang
quelle
Ist dies nicht die gleiche Lösung wie die aktuelle Top- und akzeptierte Antwort ?
AMC
25

Sie können die str.isspace()Methode verwenden.

SilentGhost
quelle
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")
Bhavesh Munot
quelle
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.

fralau
quelle
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

James Wierzba
quelle
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')
Emdadul Sawon
quelle
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)
Ahmed
quelle
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
Breitband
quelle
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