Python มีวิธีสตริงหลายวิธีในการตรวจสอบและตรวจสอบว่าประเภทสตริงเป็นตัวเลขหรือตัวอักษร
แต่ละวิธีจะอธิบายด้วยโค้ดตัวอย่าง
- กำหนดว่าสตริงเป็นตัวเลขทศนิยมหรือไม่:
str.isdecimal()
- การพิจารณาว่าสตริงเป็นตัวเลขหรือไม่:
str.isdigit()
- กำหนดว่าสตริงเป็นอักขระที่แสดงถึงตัวเลขหรือไม่:
str.isnumeric()
- กำหนดว่าสตริงเป็นตัวอักษร:
str.isalpha()
- ตรวจสอบว่าสตริงเป็นตัวอักษรและตัวเลข:
str.isalnum()
- กำหนดว่าสตริงเป็นอักขระ ASCII หรือไม่:
str.isascii()
- การตัดสินสตริงว่าง
- ตรวจสอบว่าสตริงสามารถแปลงเป็นตัวเลขได้หรือไม่
สำหรับเมธอดอื่นที่ไม่ใช่ isascii() สตริงที่มีสตริงว่าง สัญลักษณ์ต่อไปนี้ ฯลฯ เป็นเท็จ
,
.
-
-1.23 เป็นต้น เนื่องจากค่าตัวเลขจะอธิบายไว้ที่ส่วนท้ายของส่วนนี้
นิพจน์ทั่วไปสามารถใช้เพื่อกำหนดประเภทอักขระได้อย่างยืดหยุ่นมากขึ้นและเพื่อแยกประเภทอักขระที่เกี่ยวข้อง
ดูบทความต่อไปนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการตรวจสอบสิ่งต่อไปนี้
- วิธีแปลงสตริงตัวเลข (str) เป็นตัวเลข (int, float)
- วิธีการกำหนดตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก
- ที่เกี่ยวข้อง:การแปลงสตริงตัวเลขเป็นค่าตัวเลขใน Python
- ที่เกี่ยวข้อง:รายการเมธอดสตริงเพื่อจัดการเคสใน Python
- กำหนดว่าสตริงเป็นตัวเลขทศนิยมหรือไม่:str.isdecimal()
- การพิจารณาว่าสตริงเป็นตัวเลขหรือไม่:str.isdigit()
- กำหนดว่าสตริงเป็นอักขระที่แสดงถึงตัวเลขหรือไม่:str.isnumeric()
- กำหนดว่าสตริงเป็นตัวอักษร:str.isalpha()
- ตรวจสอบว่าสตริงเป็นตัวอักษรและตัวเลข:str.isalnum()
- กำหนดว่าสตริงเป็นอักขระ ASCII หรือไม่:str.isascii()
- การตัดสินสตริงว่าง
- ตรวจสอบว่าสตริงสามารถแปลงเป็นตัวเลขได้หรือไม่
กำหนดว่าสตริงเป็นตัวเลขทศนิยมหรือไม่:str.isdecimal()
ใน isdecimal() จะเป็นจริงหากอักขระทั้งหมดเป็นตัวเลขทศนิยม กล่าวคือ อักขระในหมวดหมู่ทั่วไป Nd ของ Unicode นอกจากนี้ยังเป็นจริงสำหรับตัวเลขอารบิกแบบเต็มความกว้าง ฯลฯ
s = '1234567890'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True
s = '1234567890'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True
หากมีสัญลักษณ์ เช่น เครื่องหมายลบหรือจุด แสดงว่าเป็นเท็จ ตัวอย่างเช่น หากคุณต้องการกำหนดว่าสตริงเช่น ‘-1.23’ เป็นค่าตัวเลข คุณสามารถใช้การจัดการข้อยกเว้นได้ นี้จะอธิบายไว้ที่ส่วนท้ายของส่วนนี้
s = '-1.23'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = -1.23
# isdecimal: False
# isdigit: False
# isnumeric: False
การพิจารณาว่าสตริงเป็นตัวเลขหรือไม่:str.isdigit()
ใน isdigit() นอกเหนือจากตัวเลขที่เป็นจริงใน isdecimal() ตัวเลขที่มีค่าคุณสมบัติ Unicode Numeric_Type เป็น Digit หรือ Decimal ก็เป็นจริงเช่นกัน
ตัวอย่างเช่น หมายเลขตัวยกที่แสดงกำลังสองเป็นเท็จใน isdecimal() แต่เป็นจริงใน isdigit()
- เลขยกกำลังแทนกำลังสอง
- ²
- \u00B2}’
s = '10\u00B2'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 10²
# isdecimal: False
# isdigit: True
# isnumeric: True
กำหนดว่าสตริงเป็นอักขระที่แสดงถึงตัวเลขหรือไม่:str.isnumeric()
ใน isnumeric() นอกเหนือจากตัวเลขที่เป็นจริงใน isdigit() ตัวเลขที่มีค่าคุณสมบัติ Unicode Numeric_Type เป็น Numeric ก็เป็นจริงเช่นกัน
เศษส่วน เลขโรมัน และตัวเลขจีนก็เป็นจริงเช่นกัน
s = '\u00BD'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = ½
# isdecimal: False
# isdigit: False
# isnumeric: True
s = '\u2166'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = Ⅶ
# isdecimal: False
# isdigit: False
# isnumeric: True
s = '一二三四五六七八九〇'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 一二三四五六七八九〇
# isdecimal: False
# isdigit: False
# isnumeric: True
s = '壱億参阡萬'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 壱億参阡萬
# isdecimal: False
# isdigit: False
# isnumeric: True
กำหนดว่าสตริงเป็นตัวอักษร:str.isalpha()
ใน isalpha() คุณสมบัติหมวดหมู่ทั่วไปของ Unicode ที่มีข้อใดข้อหนึ่งต่อไปนี้เป็นจริง
Lm
Lt
Lu
Ll
Lo
ตัวอักษร อักษรจีน ฯลฯ จะเป็นจริง
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
ตัวเลขอารบิกเป็นเท็จ แต่ตัวเลขจีนเป็นความจริงเพราะเป็นตัวอักษรจีนด้วย อย่างไรก็ตาม ศูนย์ในตัวเลขจีนเป็นเท็จ
s = '1234567890'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 1234567890
# isalpha: False
s = '1234567890'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 1234567890
# isalpha: False
s = '一二三四五六七八九'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 一二三四五六七八九
# isalpha: True
s = '壱億参阡萬'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 壱億参阡萬
# isalpha: True
s = '〇'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 〇
# isalpha: False
ตัวเลขโรมันเป็นเท็จ
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
ตรวจสอบว่าสตริงเป็นตัวอักษรและตัวเลข:str.isalnum()
ใน isalnum() จะเป็นจริงหากอักขระแต่ละตัวเป็นจริงในวิธีใดวิธีหนึ่งต่อไปนี้ที่แสดงไว้
isdecimal()
isdigit()
isnumeric()
isalpha()
อักขระแต่ละตัวจะถูกประเมินแยกกัน ดังนั้นสตริงที่มีตัวอักษรและตัวเลขจะเป็นจริงใน isalnum() แม้ว่าจะเป็นเท็จในวิธีอื่นๆ ทั้งหมด
s = 'abc123'
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = abc123
# isalnum: True
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
กำหนดว่าสตริงเป็นอักขระ ASCII หรือไม่:str.isascii()
Python 3.7 เพิ่ม isascii() คืนค่า true หากอักขระทั้งหมดในสตริงเป็นอักขระ ASCII
นอกจากตัวเลขและตัวอักษรแล้ว สัญลักษณ์เช่น + และ – ก็เป็นจริงเช่นกัน
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
ฮิรางานะที่ไม่ใช่ ASCII และอักขระอื่นๆ เป็นเท็จ
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
ดังที่เราจะได้เห็นกันต่อไป ซึ่งแตกต่างจากวิธีอื่นๆ isascii() คืนค่า true แม้กระทั่งสำหรับสตริงว่าง
การตัดสินสตริงว่าง
สตริงว่างเป็นจริงสำหรับ isascii() และเท็จสำหรับวิธีอื่นๆ
s = ''
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s =
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True
ใช้ bool() เพื่อตรวจสอบว่าเป็นสตริงว่างหรือไม่ ค่าที่ส่งกลับเป็นเท็จสำหรับสตริงว่างและค่าจริงเป็นอย่างอื่น
print(bool(''))
# False
print(bool('abc123'))
# True
ตรวจสอบว่าสตริงสามารถแปลงเป็นตัวเลขได้หรือไม่
สตริงค่าลบหรือเศษส่วนมีจุดหรือเครื่องหมายลบ ดังนั้น ผลลัพธ์จะเป็นเท็จสำหรับวิธีการทั้งหมด ยกเว้น isascii()
แม้ว่าค่าจริงจะเป็นจริงสำหรับ isascii() แต่ก็ไม่เหมาะสำหรับการพิจารณาว่าสตริงสามารถแปลงเป็นค่าตัวเลขได้หรือไม่ เนื่องจากค่านี้เป็นจริงแม้ว่าจะมีสัญลักษณ์หรือตัวอักษรอื่นๆ
s = '-1.23'
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s = -1.23
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True
สตริงสามารถแปลงเป็นตัวเลขทศนิยมด้วย float() ข้อผิดพลาดสำหรับสตริงที่ไม่สามารถแปลงได้
- ที่เกี่ยวข้อง:แปลงสตริงตัวเลข str เป็นจำนวน int ลอยใน Python
print(float('-1.23'))
# -1.23
print(type(float('-1.23')))
# <class 'float'>
# print(float('abc'))
# ValueError: could not convert string to float: 'abc'
ด้วยการจัดการข้อยกเว้น สามารถกำหนดฟังก์ชันที่คืนค่า จริง เมื่อสตริงสามารถแปลงด้วย float()
def is_num(s):
try:
float(s)
except ValueError:
return False
else:
return True
print(is_num('123'))
# True
print(is_num('-1.23'))
# True
print(is_num('+1.23e10'))
# True
print(is_num('abc'))
# False
print(is_num('10,000,000'))
# False
หากคุณต้องการตรวจสอบว่าตัวเลขที่คั่นด้วยเครื่องหมายจุลภาคเป็นจริงด้วย ให้ใช้ replace() เพื่อลบเครื่องหมายจุลภาค (แทนที่ด้วยสตริงว่าง)
def is_num_delimiter(s):
try:
float(s.replace(',', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter('10,000,000'))
# True
หากคุณต้องการสนับสนุนการเว้นวรรค คุณสามารถใช้แทนที่ () เพิ่มเติม
def is_num_delimiter2(s):
try:
float(s.replace(',', '').replace(' ', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter2('10,000,000'))
# True
print(is_num_delimiter2('10 000 000'))
# True