Nagbibigay ang Python ng ilang paraan ng string para matukoy at suriin kung numeric o alphabetic ang uri ng string.
Ang bawat pamamaraan ay ipinaliwanag sa sample code.
- Tinutukoy kung ang isang string ay isang decimal na digit:
str.isdecimal()
- Pagtukoy kung ang isang string ay isang numero:
str.isdigit()
- Tinutukoy kung ang isang string ay isang character na kumakatawan sa isang numero:
str.isnumeric()
- Tinutukoy kung alphabetic ang string:
str.isalpha()
- Tukuyin kung ang string ay alphanumeric:
str.isalnum()
- Tinutukoy kung ang mga string ay mga ASCII na character:
str.isascii()
- Paghatol ng walang laman na string
- Tukuyin kung ang mga string ay maaaring ma-convert sa mga numero
Para sa mga pamamaraan maliban sa isascii(), ang isang string na naglalaman ng walang laman na string, ang mga sumusunod na simbolo, atbp., ay mali.
,
.
-
-1.23, atbp., bilang isang numerical na halaga ay ipinaliwanag sa dulo ng seksyong ito.
Maaaring gamitin ang mga regular na expression upang matukoy ang mga uri ng character nang mas flexible at upang kunin ang mga nauugnay na uri ng character.
Tingnan ang sumusunod na artikulo para sa higit pang impormasyon kung paano matukoy ang sumusunod
- Paano i-convert ang isang numeric na string (str) sa isang numero (int, float)
- Paano matukoy ang upper at lower case
- KAUGNAY:Pag-convert ng isang string ng mga numero sa mga numeric na halaga sa Python
- KAUGNAY:Listahan ng mga pamamaraan ng string upang manipulahin ang kaso sa Python
- Tinutukoy kung ang isang string ay isang decimal na digit:str.isdecimal()
- Pagtukoy kung ang isang string ay isang numero:str.isdigit()
- Tinutukoy kung ang isang string ay isang character na kumakatawan sa isang numero:str.isnumeric()
- Tinutukoy kung alphabetic ang string:str.isalpha()
- Tukuyin kung ang string ay alphanumeric:str.isalnum()
- Tinutukoy kung ang mga string ay mga ASCII na character:str.isascii()
- Paghatol ng walang laman na string
- Tukuyin kung ang mga string ay maaaring ma-convert sa mga numero
Tinutukoy kung ang isang string ay isang decimal na digit:str.isdecimal()
Sa isdecimal(), ito ay totoo kung ang lahat ng mga character ay mga decimal na digit, iyon ay, mga character sa pangkalahatang kategorya Nd ng Unicode. Totoo rin ito para sa mga full-width na Arabic numeral, atbp.
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
Kung naglalaman ito ng simbolo tulad ng minus sign o tuldok, ito ay mali. Halimbawa, kung gusto mong matukoy na ang isang string gaya ng ‘-1.23’ ay isang numeric na halaga, maaari mong gamitin ang exception handling. Ito ay ipinaliwanag sa dulo ng seksyong ito.
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
Pagtukoy kung ang isang string ay isang numero:str.isdigit()
Sa isdigit(), bilang karagdagan sa mga numerong totoo sa isdecimal(), ang mga numero na ang Unicode property value na Numeric_Type ay Digit o Decimal ay totoo din.
Halimbawa, ang isang superscript na numero na kumakatawan sa isang parisukat ay mali sa isdecimal() ngunit totoo sa isdigit().
- superscript na numero na kumakatawan sa parisukat
- ²
- \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
Tinutukoy kung ang isang string ay isang character na kumakatawan sa isang numero:str.isnumeric()
Sa isnumeric(), bilang karagdagan sa mga numerong totoo sa isdigit(), ang mga numero na ang halaga ng ari-arian ng Unicode na Numeric_Type ay Numeric ay totoo rin.
Ang mga fraction, Roman numeral, at Chinese numeral ay totoo din.
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
Tinutukoy kung alphabetic ang string:str.isalpha()
Sa isalpha(), ang isang Unicode general category property na may isa sa mga sumusunod ay totoo.
Lm
Lt
Lu
Ll
Lo
Magiging totoo ang alpabeto, Chinese character, atbp.
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
Ang mga numerong Arabe ay mali, ngunit ang mga numerong Tsino ay totoo dahil sila rin ay mga letrang Tsino; gayunpaman, ang mga zero sa Chinese numeral ay mali.
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
Ang mga numerong Romano ay mali.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
Tukuyin kung ang string ay alphanumeric:str.isalnum()
Sa isalnum(), ito ay totoo kung ang bawat karakter ay totoo sa alinman sa mga sumusunod na pamamaraan na nakalista sa ngayon.
isdecimal()
isdigit()
isnumeric()
isalpha()
Ang bawat karakter ay indibidwal na sinusuri, kaya ang isang string na naglalaman ng mga titik at numero ay magiging totoo sa isalnum() kahit na mali sa lahat ng iba pang pamamaraan.
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
Tinutukoy kung ang mga string ay mga ASCII na character:str.isascii()
Idinagdag ang Python 3.7 isascii(). Nagbabalik ito ng totoo kung ang lahat ng mga character sa string ay mga ASCII na character.
Bilang karagdagan sa mga numero at titik, ang mga simbolo tulad ng + at – ay totoo rin.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
Mali ang hiragana na hindi ASCII at iba pang mga character.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
Tulad ng makikita natin sa susunod, hindi tulad ng iba pang mga pamamaraan, ang isascii() ay nagbabalik ng true kahit para sa isang walang laman na string.
Paghatol ng walang laman na string
Ang isang walang laman na string ay totoo para sa isascii() at false para sa iba pang mga pamamaraan.
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
Gumamit ng bool() upang matukoy kung ito ay isang walang laman na string. Ang return value ay false para sa isang walang laman na string at true kung hindi.
print(bool(''))
# False
print(bool('abc123'))
# True
Tukuyin kung ang mga string ay maaaring ma-convert sa mga numero
Ang mga string ng negatibo o fractional na halaga ay naglalaman ng mga tuldok o minus sign. Samakatuwid, ang resulta ay mali para sa lahat ng mga pamamaraan maliban sa isascii().
Bagama’t totoo para sa isascii(), hindi ito angkop para sa pagtukoy kung ang isang string ay maaaring ma-convert sa isang numeric na halaga, dahil ito ay totoo kahit na naglalaman ito ng iba pang mga simbolo o alpabetikong mga character.
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
Ang mga string ay maaaring ma-convert sa mga numero ng floating point na may float(). Error para sa mga string na hindi mako-convert.
print(float('-1.23'))
# -1.23
print(type(float('-1.23')))
# <class 'float'>
# print(float('abc'))
# ValueError: could not convert string to float: 'abc'
Sa paghawak ng exception, maaaring tukuyin ang isang function na nagbabalik ng true kapag ang isang string ay maaaring ma-convert gamit ang 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
Kung gusto mong matukoy na ang isang comma-separated na numero ay totoo rin, gamitin ang replace() upang alisin ang kuwit (palitan ito ng walang laman na string).
def is_num_delimiter(s):
try:
float(s.replace(',', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter('10,000,000'))
# True
Kung gusto mong suportahan ang whitespace delimitation, maaari mong gamitin ang replace() nang higit pa.
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