ฉันจะทดสอบได้อย่างไรว่าสตริงมีช่องว่างเท่านั้น?
สตริงตัวอย่าง:
" "
(space, space, space)" \t \n "
(space, tab, space, newline, space)"\n\n\n\t\n"
(ขึ้นบรรทัดใหม่ขึ้นบรรทัดใหม่ขึ้นบรรทัดแท็บขึ้นบรรทัดใหม่)
ฉันจะทดสอบได้อย่างไรว่าสตริงมีช่องว่างเท่านั้น?
สตริงตัวอย่าง:
" "
(space, space, space)
" \t \n "
(space, tab, space, newline, space)
"\n\n\n\t\n"
(ขึ้นบรรทัดใหม่ขึ้นบรรทัดใหม่ขึ้นบรรทัดแท็บขึ้นบรรทัดใหม่)
คำตอบ:
ใช้str.isspace()
วิธีการ:
ย้อนกลับ
True
ถ้ามีเพียงตัวอักษรช่องว่างในสตริงและมีอย่างน้อยหนึ่งตัวอักษรFalse
เป็นอย่างอื่นตัวละครเป็นช่องว่างถ้าในฐานข้อมูลอักขระ Unicode (ดูunicodedata ) ประเภททั่วไปของมันคือ Zs (“ ตัวคั่นช่องว่าง”) หรือคลาสแบบสองทิศทางคือหนึ่งใน WS, B หรือ S
รวมกับกรณีพิเศษสำหรับการจัดการสตริงว่าง
หรือคุณสามารถใช้str.strip()
และตรวจสอบว่าผลลัพธ์ว่างเปล่าหรือไม่
None
หรือ''
if len(str) == 0 or str.isspace():
len(my_str) == 0
ยังสามารถเขียนnot my_str
ได้
>>> tests = ['foo', ' ', '\r\n\t', '', None]
>>> [not s or s.isspace() for s in tests]
[False, True, True, True, True]
True
สำหรับNone
?
คุณต้องการใช้isspace()
วิธีการ
STR isspace ()
คืนค่าจริงถ้ามีอักขระช่องว่างเฉพาะในสตริงและมีอักขระอย่างน้อยหนึ่งตัวเป็นเท็จ
ที่กำหนดไว้ในทุกวัตถุสตริง นี่คือตัวอย่างการใช้งานสำหรับกรณีการใช้งานเฉพาะของคุณ:
if aStr and (not aStr.isspace()):
print aStr
คุณสามารถใช้str.isspace()
วิธีการ
สำหรับผู้ที่คาดหวังพฤติกรรมเช่น apache StringUtils.isBlankหรือ Guava Strings.isNullOrEmpty :
if mystring and mystring.strip():
print "not blank string"
else:
print "blank string"
ตรวจสอบความยาวของรายการที่กำหนดโดยวิธี split ()
if len(your_string.split()==0:
print("yes")
หรือเปรียบเทียบวิธีเอาท์พุทของ strip () ด้วย null
if your_string.strip() == '':
print("yes")
len()
ทำงานบนสตริง นอกจากนี้ OP ไม่ได้ขอให้ทดสอบสตริงว่าง แต่สำหรับสตริงที่มีช่องว่างทั้งหมด วิธีที่สองของคุณไม่เลว นอกจากนี้คุณยังไม่จำเป็นต้องใช้ parens รอบเงื่อนไขแบบหลาม
==0
ด้วย==1
if len(your_string.split())==0:
-> if not your_string.split():
, ->if your_string.strip() == '':
if not your_string.strip():
ไม่ว่าในกรณีใดวิธีแรกจะด้อยกว่าโซลูชันที่มีอยู่และคำตอบที่สองได้ถูกกล่าวถึงแล้วในคำตอบอื่น ๆ
นี่คือคำตอบที่ควรใช้งานได้ในทุกกรณี:
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 == True
None is False
มันอาจจะชัดเจนเพียงแค่การพูด นอกจากนี้==
ไม่ควรใช้สำหรับการเปรียบเทียบเหล่านี้
ฉันสมมติว่าในสถานการณ์ของคุณสตริงว่างเปล่าเป็นสตริงที่ว่างเปล่าจริงหรือหนึ่งที่มีพื้นที่สีขาวทั้งหมด
if(str.strip()):
print("string is not empty")
else:
print("string is empty")
หมายเหตุนี่ไม่ได้ตรวจสอบ None
ฉันใช้ดังต่อไปนี้:
if str and not str.isspace():
print('not null and not empty nor whitespace')
else:
print('null or empty or whitespace')
None
?
เพื่อตรวจสอบว่าสตริงเป็นเพียงช่องว่างหรือขึ้นบรรทัดใหม่
ใช้รหัสง่าย ๆ นี้
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)
คล้ายกับวิธีคงที่ 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())
None
และ""
เป็นเท็จดังนั้นคุณสามารถ:return not str or str.isspace()
U+00A0
ALT+160
ดูคงที่ใน Python 2.7 อย่างไรก็ตาม