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)

bodacydo
sumber

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.

Vladislav
sumber
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]
John Machin
sumber
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
Eric Wang
sumber
Apakah ini bukan solusi yang sama dengan jawaban teratas dan diterima saat ini ?
AMC
25

Anda dapat menggunakan str.isspace()metode ini.

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

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

James Wierzba
sumber
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')
Emdadul Sawon
sumber
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)
Ahmed
sumber
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
broadband
sumber
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