ตรวจสอบว่าสายอักขระมีช่องว่างเท่านั้น


220

ฉันจะทดสอบได้อย่างไรว่าสตริงมีช่องว่างเท่านั้น?

สตริงตัวอย่าง:

  • " " (space, space, space)

  • " \t \n " (space, tab, space, newline, space)

  • "\n\n\n\t\n" (ขึ้นบรรทัดใหม่ขึ้นบรรทัดใหม่ขึ้นบรรทัดแท็บขึ้นบรรทัดใหม่)

คำตอบ:


312

ใช้str.isspace()วิธีการ:

ย้อนกลับTrueถ้ามีเพียงตัวอักษรช่องว่างในสตริงและมีอย่างน้อยหนึ่งตัวอักษรFalseเป็นอย่างอื่น

ตัวละครเป็นช่องว่างถ้าในฐานข้อมูลอักขระ Unicode (ดูunicodedata ) ประเภททั่วไปของมันคือ Zs (“ ตัวคั่นช่องว่าง”) หรือคลาสแบบสองทิศทางคือหนึ่งใน WS, B หรือ S

รวมกับกรณีพิเศษสำหรับการจัดการสตริงว่าง

หรือคุณสามารถใช้str.strip()และตรวจสอบว่าผลลัพธ์ว่างเปล่าหรือไม่


นี้ล้มเหลวในหลาม 2.4 ถ้าสตริงมีพื้นที่ที่ไม่ทำลาย charcode หรือU+00A0 ALT+160ดูคงที่ใน Python 2.7 อย่างไรก็ตาม
Kumba

18
โปรดทราบว่าสิ่งนี้ไม่ได้ตรวจสอบNoneหรือ''
Parth Mehrotra

1
ใน python 2.7.13 isspace () จะพิจารณาเว้นวรรคแบบไม่แบ่งเป็นช่องว่าง ดี!
Iching Chang

คุณอาจต้องการยกเว้นสตริงว่างเช่นกันในกรณีนี้คุณสามารถทำได้:if len(str) == 0 or str.isspace():
Joe

@ Joe len(my_str) == 0ยังสามารถเขียนnot my_strได้
AMC


32

คุณต้องการใช้isspace()วิธีการ

STR isspace ()

คืนค่าจริงถ้ามีอักขระช่องว่างเฉพาะในสตริงและมีอักขระอย่างน้อยหนึ่งตัวเป็นเท็จ

ที่กำหนดไว้ในทุกวัตถุสตริง นี่คือตัวอย่างการใช้งานสำหรับกรณีการใช้งานเฉพาะของคุณ:

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

นี่ไม่ใช่คำตอบเดียวกับคำตอบยอดนิยมในปัจจุบันหรือไม่?
AMC



6

ตรวจสอบความยาวของรายการที่กำหนดโดยวิธี split ()

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

หรือเปรียบเทียบวิธีเอาท์พุทของ strip () ด้วย null

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

1
ไม่มีเหตุผลที่จะแยกสตริงlen()ทำงานบนสตริง นอกจากนี้ OP ไม่ได้ขอให้ทดสอบสตริงว่าง แต่สำหรับสตริงที่มีช่องว่างทั้งหมด วิธีที่สองของคุณไม่เลว นอกจากนี้คุณยังไม่จำเป็นต้องใช้ parens รอบเงื่อนไขแบบหลาม
NeilK

1
น่าแปลกที่วิธีแรกเป็นวิธีที่ดีในการตรวจสอบว่าไม่มีตัวอักษรใด ๆ เป็นช่องว่างถ้าคุณแทนที่==0ด้วย==1
Mad Physicist

if len(your_string.split())==0:-> if not your_string.split():, ->if your_string.strip() == '': if not your_string.strip():ไม่ว่าในกรณีใดวิธีแรกจะด้อยกว่าโซลูชันที่มีอยู่และคำตอบที่สองได้ถูกกล่าวถึงแล้วในคำตอบอื่น ๆ
AMC

3

นี่คือคำตอบที่ควรใช้งานได้ในทุกกรณี:

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

หากตัวแปรเป็น None จะหยุดที่not sและจะไม่ประเมินผลเพิ่มเติม (ตั้งแต่not None == True) เห็นได้ชัดว่าstrip()วิธีการดูแลกรณีปกติของแท็บขึ้นบรรทัดใหม่ ฯลฯ


ตั้งแต่not None == TrueNone is Falseมันอาจจะชัดเจนเพียงแค่การพูด นอกจากนี้==ไม่ควรใช้สำหรับการเปรียบเทียบเหล่านี้
AMC

2

ฉันสมมติว่าในสถานการณ์ของคุณสตริงว่างเปล่าเป็นสตริงที่ว่างเปล่าจริงหรือหนึ่งที่มีพื้นที่สีขาวทั้งหมด

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

หมายเหตุนี่ไม่ได้ตรวจสอบ None


สิ่งนี้ไม่ได้ถูกครอบคลุมโดยคำตอบที่มีอยู่แล้ว?
AMC

2

ฉันใช้ดังต่อไปนี้:

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

nullคุณหมายถึงNone?
AMC

1

เพื่อตรวจสอบว่าสตริงเป็นเพียงช่องว่างหรือขึ้นบรรทัดใหม่

ใช้รหัสง่าย ๆ นี้

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

คุณสามารถreturn (str is None) or (str == "") or (str.isspace())
Alexander - Reinstate Monica

โอ้และทั้งสองNoneและ""เป็นเท็จดังนั้นคุณสามารถ:return not str or str.isspace()
Alexander - Reinstate Monica

นี่เป็นเรื่องธรรมดา
AMC

@AMC คุณช่วยอธิบายเรื่องนี้ได้ฉันไม่เข้าใจว่าคุณกำลังพยายามจะพูดอะไร
บรอดแบนด์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.