Kiểm tra xem chuỗi chỉ chứa khoảng trắng


218

Làm cách nào để kiểm tra nếu một chuỗi chỉ chứa khoảng trắng?

Chuỗi ví dụ:

  • " " (không gian, không gian, không gian)

  • " \t \n " (không gian, tab, không gian, dòng mới, không gian)

  • "\n\n\n\t\n" (dòng mới, dòng mới, dòng mới, tab, dòng mới)

Câu trả lời:


312

Sử dụng str.isspace()phương pháp:

Trả về Truenếu chỉ có các ký tự khoảng trắng trong chuỗi và có ít nhất một ký tự False.

Một ký tự là khoảng trắng nếu trong cơ sở dữ liệu ký tự Unicode (xem unicodingata ), hoặc loại chung của nó là Zs (Dấu phân cách, dấu cách không gian) hoặc lớp hai chiều của nó là một trong các WS, B hoặc S.

Kết hợp điều đó với một trường hợp đặc biệt để xử lý chuỗi rỗng.

Ngoài ra, bạn có thể sử dụng str.strip()và kiểm tra xem kết quả có trống không.


Điều này không thành công trong Python 2.4 nếu chuỗi chứa không gian không phá vỡ, charcode U+00A0hoặc ALT+160. Trông có vẻ cố định trong Python 2.7, tuy nhiên.
Kumba

18
Hãy nhớ rằng điều này không kiểm tra None, hoặc''
Parth Mehrotra

1
Trong python 2.7.13, isspace () sẽ coi không gian không phá vỡ là khoảng trắng. Đẹp!
Iching Chang

Bạn cũng có thể muốn loại trừ các chuỗi trống, trong trường hợp đó bạn có thể làm:if len(str) == 0 or str.isspace():
Joe

@Joe len(my_str) == 0cũng có thể được viết 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]

Tại sao sự lựa chọn để có nó trở lại Truecho None?
AMC

32

Bạn muốn sử dụng isspace()phương pháp

str. không gian ()

Trả về true nếu chỉ có các ký tự khoảng trắng trong chuỗi và có ít nhất một ký tự, sai khác.

Điều đó được định nghĩa trên mọi đối tượng chuỗi. Đây là một ví dụ sử dụng cho trường hợp sử dụng cụ thể của bạn:

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

Đây có phải là giải pháp không giống như câu trả lời hàng đầu và được chấp nhận hiện nay ?
AMC



6

Kiểm tra độ dài của danh sách được đưa ra bởi phương thức split ().

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

Hoặc So sánh đầu ra của phương thức dải () với null.

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

1
Không có lý do để phân chia chuỗi, len()hoạt động trên chuỗi. Ngoài ra, OP không yêu cầu kiểm tra chuỗi trống, nhưng đối với một chuỗi là tất cả các khoảng trắng. Phương pháp thứ hai của bạn không phải là xấu. Ngoài ra, parens của bạn xung quanh điều kiện không cần thiết trong python.
NeilK

1
Thật kỳ lạ, phương pháp đầu tiên thực sự là một cách tốt để kiểm tra hơn không có nhân vật nào là không gian, nếu bạn thay thế ==0bằng==1
Mad Physicist

if len(your_string.split())==0:-> if not your_string.split():, if your_string.strip() == '':-> if not your_string.strip():. Trong mọi trường hợp, giải pháp thứ nhất kém hơn các giải pháp hiện có và giải pháp thứ hai đã được đề cập trong các câu trả lời khác.
AMC

3

Đây là một câu trả lời nên hoạt động trong mọi trường hợp:

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

Nếu biến là Không, nó sẽ dừng tại not svà không đánh giá thêm (kể từ đó not None == True). Rõ ràng, strip()phương thức này xử lý các trường hợp thông thường của tab, dòng mới, v.v.


not None == True có lẽ rõ ràng hơn để nói None is False. Ngoài ra, ==không nên được sử dụng cho những so sánh này.
AMC

2

Tôi giả sử trong kịch bản của bạn, một chuỗi rỗng là một chuỗi thực sự trống hoặc một chuỗi chứa tất cả khoảng trắng.

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

Lưu ý điều này không kiểm tra None


Điều này đã không được bao phủ bởi các câu trả lời hiện tại?
AMC

2

Tôi đã sử dụng như sau:

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

Null Bạn có nghĩa là None?
AMC

1

Để kiểm tra xem một chuỗi chỉ là khoảng trắng hay dòng mới

Sử dụng mã đơn giản này

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

Tương tự với phương thức tĩnh chuỗi c # làNullOrWhiteSpace.

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

Bạn chỉ có thểreturn (str is None) or (str == "") or (str.isspace())
Alexander - Tái lập Monica

Ồ, và cả hai None""đều là giả, vì vậy bạn chỉ có thể:return not str or str.isspace()
Alexander - Tái lập Monica

Điều này là khá không phổ biến.
AMC

@AMC bạn có thể giải thích điều này không, tôi không hiểu bạn đang nói gì.
băng thông rộng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.