Python menyediakan beberapa kaedah rentetan untuk menentukan dan menyemak sama ada jenis rentetan adalah angka atau abjad.
Setiap kaedah diterangkan dengan kod sampel.
- Menentukan sama ada rentetan ialah digit perpuluhan:
str.isdecimal()
- Menentukan sama ada rentetan ialah nombor:
str.isdigit()
- Menentukan sama ada rentetan ialah aksara yang mewakili nombor:
str.isnumeric()
- Menentukan sama ada rentetan adalah abjad:
str.isalpha()
- Tentukan sama ada rentetan ialah abjad angka:
str.isalnum()
- Tentukan sama ada rentetan ialah aksara ASCII:
str.isascii()
- Penghakiman rentetan kosong
- Tentukan sama ada rentetan boleh ditukar kepada nombor
Untuk kaedah selain isascii(), rentetan yang mengandungi rentetan kosong, simbol berikut, dsb., adalah palsu.
,
.
-
-1.23, dsb., sebagai nilai berangka diterangkan pada penghujung bahagian ini.
Ungkapan biasa boleh digunakan untuk menentukan jenis aksara dengan lebih fleksibel dan untuk mengekstrak jenis aksara yang berkaitan.
Lihat artikel berikut untuk mendapatkan maklumat lanjut tentang cara menentukan perkara berikut
- Bagaimana untuk menukar rentetan angka (str) kepada nombor (int, float)
- Bagaimana untuk menentukan huruf besar dan kecil
- BERKAITAN:Menukar rentetan nombor kepada nilai angka dalam Python
- BERKAITAN:Senarai kaedah rentetan untuk memanipulasi kes dalam Python
- Menentukan sama ada rentetan ialah digit perpuluhan:str.isdecimal()
- Menentukan sama ada rentetan ialah nombor:str.isdigit()
- Menentukan sama ada rentetan ialah aksara yang mewakili nombor:str.isnumeric()
- Menentukan sama ada rentetan adalah abjad:str.isalpha()
- Tentukan sama ada rentetan ialah abjad angka:str.isalnum()
- Tentukan sama ada rentetan ialah aksara ASCII:str.isascii()
- Penghakiman rentetan kosong
- Tentukan sama ada rentetan boleh ditukar kepada nombor
Menentukan sama ada rentetan ialah digit perpuluhan:str.isdecimal()
Dalam isdecimal(), adalah benar jika semua aksara ialah digit perpuluhan, iaitu aksara dalam kategori umum Nd Unicode. Ia juga benar untuk angka Arab lebar penuh, dsb.
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
Jika ia mengandungi simbol seperti tanda tolak atau noktah, ia adalah palsu. Sebagai contoh, jika anda ingin menentukan bahawa rentetan seperti ‘-1.23’ ialah nilai berangka, anda boleh menggunakan pengendalian pengecualian. Ini dijelaskan di penghujung bahagian ini.
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
Menentukan sama ada rentetan ialah nombor:str.isdigit()
Dalam isdigit(), sebagai tambahan kepada nombor yang benar dalam isdecimal(), nombor yang nilai sifat Unicodenya Numeric_Type ialah Digit atau Decimal juga benar.
Sebagai contoh, nombor superskrip yang mewakili segi empat sama adalah palsu dalam isdecimal() tetapi benar dalam isdigit().
- nombor superskrip yang mewakili segi empat sama
- ²
- \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
Menentukan sama ada rentetan ialah aksara yang mewakili nombor:str.isnumeric()
Dalam isnumeric(), sebagai tambahan kepada nombor yang benar dalam isdigit(), nombor yang nilai sifat Unicodenya Numeric_Type ialah Numeric juga benar.
Pecahan, angka Rom, dan angka Cina juga benar.
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
Menentukan sama ada rentetan adalah abjad:str.isalpha()
Dalam isalpha(), sifat kategori umum Unicode dengan salah satu daripada yang berikut adalah benar.
Lm
Lt
Lu
Ll
Lo
Abjad, aksara Cina, dsb. adalah benar.
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
Angka Arab adalah palsu, tetapi angka Cina adalah benar kerana ia juga adalah aksara Cina; bagaimanapun, sifar dalam angka Cina adalah palsu.
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
Angka Rom adalah palsu.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
Tentukan sama ada rentetan ialah abjad angka:str.isalnum()
Dalam isalnum(), adalah benar jika setiap aksara adalah benar dalam mana-mana kaedah berikut yang disenaraikan setakat ini.
isdecimal()
isdigit()
isnumeric()
isalpha()
Setiap aksara dinilai secara individu, jadi rentetan yang mengandungi huruf dan nombor akan menjadi benar dalam isalnum() walaupun palsu dalam semua kaedah lain.
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
Tentukan sama ada rentetan ialah aksara ASCII:str.isascii()
Python 3.7 menambah isascii(). Ia kembali benar jika semua aksara dalam rentetan adalah aksara ASCII.
Selain nombor dan huruf, simbol seperti + dan – juga benar.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
Hiragana bukan ASCII dan aksara lain adalah palsu.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
Seperti yang akan kita lihat seterusnya, tidak seperti kaedah lain, isascii() mengembalikan benar walaupun untuk rentetan kosong.
Penghakiman rentetan kosong
Rentetan kosong adalah benar untuk isascii() dan palsu untuk kaedah lain.
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
Gunakan bool() untuk menentukan sama ada ia adalah rentetan kosong. Nilai pulangan adalah palsu untuk rentetan kosong dan benar sebaliknya.
print(bool(''))
# False
print(bool('abc123'))
# True
Tentukan sama ada rentetan boleh ditukar kepada nombor
Rentetan nilai negatif atau pecahan mengandungi noktah atau tanda tolak. Oleh itu, hasilnya adalah palsu untuk semua kaedah kecuali isascii().
Walaupun benar untuk isascii(), ia tidak sesuai untuk menentukan sama ada rentetan boleh ditukar kepada nilai berangka, kerana ia benar walaupun ia mengandungi simbol atau aksara abjad lain.
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
Rentetan boleh ditukar kepada nombor titik terapung dengan float(). Ralat untuk rentetan yang tidak boleh ditukar.
print(float('-1.23'))
# -1.23
print(type(float('-1.23')))
# <class 'float'>
# print(float('abc'))
# ValueError: could not convert string to float: 'abc'
Dengan pengendalian pengecualian, fungsi boleh ditakrifkan yang mengembalikan benar apabila rentetan boleh ditukar dengan 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
Jika anda ingin menentukan bahawa nombor yang dipisahkan koma juga benar, gunakan replace() untuk mengalih keluar koma (gantikan dengan rentetan kosong).
def is_num_delimiter(s):
try:
float(s.replace(',', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter('10,000,000'))
# True
Jika anda ingin menyokong persempadanan ruang putih, anda boleh menggunakan replace() selanjutnya.
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