Periksa apakah string hanya berisi spasi putih


219

Bagaimana saya bisa menguji jika string hanya berisi spasi putih?

Contoh string:

  • " " (ruang, ruang, ruang)

  • " \t \n " (spasi, tab, spasi, baris baru, spasi)

  • "\n\n\n\t\n" (baris baru, baris baru, baris baru, tab, baris baru)

Jawaban:


312

Gunakan str.isspace()metode:

Kembali Truejika hanya ada karakter spasi putih di string dan setidaknya ada satu karakter False.

Karakter adalah spasi bila dalam database karakter Unicode (lihat unicodedata ), kategori umumnya adalah Zs ("Separator, space"), atau kelas dua arahnya adalah salah satu dari WS, B, atau S.

Kombinasikan dengan case khusus untuk menangani string kosong.

Atau, Anda dapat menggunakan str.strip()dan memeriksa apakah hasilnya kosong.


Ini gagal dalam Python 2.4 jika string berisi spasi, charcode U+00A0atau ALT+160. Tampak diperbaiki di Python 2.7, namun.
Kumba

18
Perlu diingat bahwa ini tidak memeriksa None, atau''
Parth Mehrotra

1
Dalam python 2.7.13, isspace () akan mempertimbangkan ruang non-breaking sebagai spasi. Bagus!
Iching Chang

Anda mungkin juga ingin mengecualikan string kosong, dalam hal ini Anda dapat melakukannya:if len(str) == 0 or str.isspace():
Joe

@ Jo len(my_str) == 0juga bisa ditulis 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]

Mengapa pilihan untuk memilikinya kembali Trueuntuk None?
AMC

32

Anda ingin menggunakan isspace()metode ini

str. isspace ()

Kembalikan true jika hanya ada karakter spasi putih di string dan setidaknya ada satu karakter, false jika tidak.

Itu didefinisikan pada setiap objek string. Ini adalah contoh penggunaan untuk kasus penggunaan spesifik Anda:

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

Apakah ini bukan solusi yang sama dengan jawaban teratas dan diterima saat ini ?
AMC



6

Periksa panjang daftar yang diberikan oleh metode split ().

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

Atau Bandingkan keluaran metode strip () dengan nol.

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

1
Tidak ada alasan untuk memisahkan string, len()bekerja pada string. Juga, OP tidak meminta untuk menguji string kosong, tetapi untuk string yang semua spasi. Metode kedua Anda tidak buruk. Juga, orang tua Anda yang berada di sekitar kondisi tidak diperlukan dalam python.
NeilK

1
Anehnya, metode pertama sebenarnya adalah cara yang baik untuk memeriksa daripada tidak ada karakter spasi, jika Anda ganti ==0dengan==1
Mad Physicist

if len(your_string.split())==0:-> if not your_string.split():, if your_string.strip() == '':-> if not your_string.strip():. Bagaimanapun, yang pertama lebih rendah daripada solusi yang ada, dan yang kedua telah disebutkan dalam jawaban lain.
AMC

3

Berikut ini jawaban yang cocok untuk semua kasus:

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

Jika variabelnya adalah Tidak ada, itu akan berhenti pada not sdan tidak mengevaluasi lebih lanjut (sejak not None == True). Tampaknya, strip()metode ini menangani kasus tab, baris baru, dll.


karenanot None == True Mungkin lebih jelas untuk hanya mengatakan None is False. Juga, ==tidak boleh digunakan untuk perbandingan ini.
AMC

2

Saya berasumsi dalam skenario Anda, string kosong adalah string yang benar-benar kosong atau yang berisi semua ruang putih.

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

Catatan ini tidak memeriksa None


Bukankah ini sudah dicakup oleh jawaban yang ada?
AMC

2

Saya menggunakan berikut:

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

Null Apakah yang Anda maksud None?
AMC

1

Untuk memeriksa apakah string hanya spasi atau baris baru

Gunakan kode sederhana ini

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

Kemiripan dengan metode statis 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

Anda bisa sajareturn (str is None) or (str == "") or (str.isspace())
Alexander - Reinstate Monica

Oh, dan keduanya Nonedan ""palsu, sehingga Anda bisa saja:return not str or str.isspace()
Alexander - Reinstate Monica

Ini sangat tidak otomatis.
AMC

@ AMC dapat Anda menjelaskan hal ini, saya tidak mengerti apa yang Anda katakan.
broadband
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.