在處理文字資料時,判斷字串是否僅由數字字元組成是常見需求。Python 的 isnumeric() 方法專為此設計,它能識別 Unicode 數字字元(含中文數字、羅馬數字等),比 isdigit() 更強大。本文詳細說明語法、回傳規則、Unicode 應用與實戰範例。
str.isnumeric()
回傳值規則:
True。False。關鍵差異: isnumeric() 辨識範圍包含 isdigit() 所有字元,額外支援:中文數字(一、二、三)、全形數字(123)、分數(½、⅓)、羅馬數字(Ⅰ、Ⅱ)等 Unicode 數字字元。
#!/usr/bin/python3
# 範例 1:一般 ASCII 數字
s1 = "23443434"
print(s1.isnumeric()) # True
# 範例 2:含字母
s2 = "this2009"
print(s2.isnumeric()) # False
# 範例 3:中文數字(Unicode)
s3 = "一二三四五"
print(s3.isnumeric()) # True
# 範例 4:全形數字
s4 = "12345"
print(s4.isnumeric()) # True
# 範例 5:分數符號
s5 = "½⅓¼"
print(s5.isnumeric()) # True
# 範例 6:羅馬數字
s6 = "ⅠⅡⅢⅣ"
print(s6.isnumeric()) # True
# 範例 7:含符號
s7 = "123.45"
print(s7.isnumeric()) # False(小數點非數字字元)
# 範例 8:空字串
s8 = ""
print(s8.isnumeric()) # False
| 方法 | ASCII 數字 | 全形數字 | 中文數字 | 分數/羅馬數字 | 負號/小數點 |
|---|---|---|---|---|---|
| isdecimal() | ✓ | ✓ | ✗ | ✗ | ✗ |
| isdigit() | ✓ | ✓ | ✗ | ✗ | ✗ |
| isnumeric() | ✓ | ✓ | ✓ | ✓ | ✗ |
選擇建議:
• 嚴格驗證 0-9 → isdecimal()
• 一般數字識別 → isdigit()
• 多語言數字支援 → isnumeric()
u"" 前綴。-123、3.14、1e5)皆回傳 False。try: float(s); except: ... 方式。isnumeric() 是處理多語言數字字元的利器,特別適合國際化應用。理解三個數字判斷方法的差異,能讓你在資料驗證、文字分析場合做出最精準的選擇。