Dizenin yalnızca boşluk içerip içermediğini kontrol edin


220

Bir dizenin yalnızca boşluk içerip içermediğini nasıl test edebilirim?

Örnek dizeler:

  • " " (boşluk, boşluk, boşluk)

  • " \t \n " (boşluk, sekme, boşluk, yeni satır, boşluk)

  • "\n\n\n\t\n" (yeni satır, yeni satır, yeni satır, sekme, yeni satır)

Yanıtlar:


312

str.isspace()Yöntemi kullanın :

TrueDizede yalnızca boşluk karakterleri varsa ve en az bir karakter varsa geri dönün False.

Bir karakter, Unicode karakter veritabanında (bkz. Unicodedata ), genel kategorisi Zs (“Ayırıcı, boşluk”) veya çift yönlü sınıfı WS, B veya S'den biriyse boşluktur.

Bunu boş ipi işlemek için özel bir çanta ile birleştirin.

Alternatif olarak, str.strip()sonucun boş olup olmadığını kontrol edebilir ve kontrol edebilirsiniz.


Dize bir boşluk bırakmazsa, kod U+00A0veya ALT+160. Ancak Python 2.7'de sabit görünüyor.
Kumba

18
Bu kontrol etmez unutmayın None, ya''
Parth Mehrotra

1
Python 2.7.13'te isspace (), kırılmamış alanı bir boşluk olarak kabul edecektir. Güzel!
Iching Chang

Ayrıca boş dizeleri de hariç tutmak isteyebilirsiniz, bu durumda şunları yapabilirsiniz:if len(str) == 0 or str.isspace():
Joe

@ Joe len(my_str) == 0da yazılabilir 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]

Neden seçim geri dönmek zorunda Trueiçin None?
AMC

32

isspace()Yöntemi kullanmak istiyorsunuz

str. isspace ()

Dizede yalnızca boşluk karakterleri varsa ve en az bir karakter varsa true değerini döndürür, aksi takdirde false olur.

Bu, her dize nesnesinde tanımlanır. Özel kullanım durumunuz için bir kullanım örneği:

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

Bu şimdiki üst ve kabul edilen cevapla aynı çözüm değil mi?
AMC



6

Split () yöntemiyle verilen listenin uzunluğunu kontrol edin.

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

Veya strip () yönteminin çıktısını null ile karşılaştırın.

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

1
Dizeyi bölmek için hiçbir neden yoktur len(), dizeler üzerinde çalışır. Ayrıca, OP boş dizeyi sınamak istemiyordu, ancak tüm boşluklar olan bir dizeyi sınamak istiyordu. İkinci yönteminiz kötü değil. Ayrıca, koşullu olan parensiniz python'da gerekli değildir.
NeilK

1
Gariptir ki, ilk yöntem daha kontrol etmek iyi bir yol aslında hiçbiri değiştirmek eğer karakter, boşluk vardır ==0ile==1
Mad Fizikçi

if len(your_string.split())==0:-> if not your_string.split():, if your_string.strip() == '':-> if not your_string.strip():. Her durumda, birincisi mevcut çözümlerden daha düşüktür ve ikincisi diğer cevaplarda zaten belirtilmiştir.
AMC

3

İşte her durumda çalışması gereken bir cevap:

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

Değişken Yok ise, durur not sve daha fazla değerlendirilmez (o zamandan beri not None == True). Görünüşe göre, strip()yöntem her zamanki sekme, yeni satır, vb.


çünkünot None == True muhtemelen söylemek daha açıktır None is False. Ayrıca, ==bu karşılaştırmalar için kullanılmamalıdır.
AMC

2

Senaryoda varsayıyorum, boş bir dize gerçekten boş bir dize ya da tüm beyaz boşluk içeren bir dizedir.

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

Bunun kontrol etmediğini unutmayın None


Bu zaten mevcut cevaplar tarafından ele alınmadı mı?
AMC

2

Aşağıdaki kullandım:

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

BOŞ Şunu musunuz None?
AMC

1

Bir dizenin yalnızca boşluk mu yoksa yeni satır mı olduğunu kontrol etmek için

Bu basit kodu kullanın

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

C # string statik yöntemiyle benzerlik 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

Sadecereturn (str is None) or (str == "") or (str.isspace())
Alexander - Monica'yı yeniden eski haline

Oh, ve her ikisi Noneve ""böylece olabildiğince, falsy sadece:return not str or str.isspace()
Alexander - Eski Monica

Bu oldukça unidiomatik.
AMC

@ AMC bunu ayrıntılı olarak açıklayabilir misiniz, ne söylemeye çalıştığınızı anlamıyorum.
geniş bant
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.