A Python meghatározza és ellenőrzi, hogy egy karakterlánc numerikus vagy alfabetikus-e.

Üzleti

A Python számos karakterlánc-módszert biztosít annak megállapítására és ellenőrzésére, hogy egy karakterlánc típusa numerikus vagy alfabetikus.

Minden módszert példakóddal magyarázunk el.

  • Megállapítja, hogy egy karakterlánc tizedesjegy-e:str.isdecimal()
  • Annak meghatározása, hogy egy karakterlánc szám-e:str.isdigit()
  • Meghatározza, hogy egy karakterlánc egy számot ábrázoló karakter-e.:str.isnumeric()
  • Meghatározza, hogy a karakterlánc alfabetikus-e:str.isalpha()
  • Annak meghatározása, hogy a karakterlánc alfanumerikus-e:str.isalnum()
  • Meghatározza, hogy a karakterláncok ASCII karakterek-e:str.isascii()
  • Az üres karakterlánc megítélése
  • Annak meghatározása, hogy a karakterláncok számokká konvertálhatók-e

Az isascii() metódustól eltérő metódusok esetén az üres karakterláncot, a következő szimbólumokat stb. tartalmazó karakterlánc hamis.

  • ,
  • .
  • -

-1,23, stb., mint számértéket e szakasz végén ismertetjük.

A reguláris kifejezések rugalmasabb karaktertípusok meghatározására és a megfelelő karaktertípusok kinyerésére használhatók.

A következők meghatározásáról a következő cikkben talál további információkat

  • Hogyan konvertáljunk egy numerikus karakterláncot (str) számmá (int, float)?
  • Hogyan határozzuk meg a kis- és nagybetűket

Megállapítja, hogy egy karakterlánc tizedesjegy-e: str.isdecimal()

Az isdecimal() függvényben igaz, ha minden karakter tizedesjegy, azaz a Unicode általános Nd kategóriájába tartozó karakter. Ez igaz a teljes szélességű arab számjegyekre is, stb.

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

Ha egy szimbólumot tartalmaz, például egy mínusz jelet vagy egy pontot, akkor hamis. Ha például azt szeretné megállapítani, hogy egy olyan karakterlánc, mint például a '-1,23' numerikus érték, akkor kivételkezelést használhat. Ezt a szakasz végén ismertetjük.

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

Annak meghatározása, hogy egy karakterlánc szám-e: str.isdigit()

Az isdigit()-ben az isdecimal()-ban igaz számok mellett azok a számok is igazak, amelyek Unicode tulajdonság értéke Numeric_Type Digit vagy Decimal.

Például egy négyzetet ábrázoló feliratos szám hamis az isdecimal() függvényben, de igaz az isdigit() függvényben.

  • a négyzetet jelölő feliratos szám
    • ²
    • '\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

Meghatározza, hogy egy karakterlánc egy számot ábrázoló karakter-e.: str.isnumeric()

Az isnumeric()-ben az isdigit()-ben igaz számok mellett azok a számok is igazak, amelyek Unicode tulajdonságának értéke Numeric_Type Numeric.

A törtek, a római számok és a kínai számok is igazak.

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

Meghatározza, hogy a karakterlánc alfabetikus-e: str.isalpha()

Az isalpha()-ban egy olyan Unicode általános kategóriájú tulajdonság, amely az alábbiak valamelyikét tartalmazza, igaz.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Az ábécé, a kínai írásjegyek stb. igazak lesznek.

s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True

s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True

Az arab számok hamisak, de a kínai számok igazak, mert ezek is kínai írásjegyek; a kínai számokban lévő nullák azonban hamisak.

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

A római számok hamisak.

s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False

Annak meghatározása, hogy a karakterlánc alfanumerikus-e: str.isalnum()

Az isalnum()-ban igaz, ha minden karakter igaz az eddig felsorolt módszerek bármelyikében.

  • isdecimal()
  • isdigit()
  • isnumeric()
  • isalpha()

Minden karakter külön-külön kerül kiértékelésre, így egy betűket és számokat tartalmazó karakterlánc akkor is igaz lesz az isalnum() metódusban, ha az összes többi metódusban hamis.

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

Meghatározza, hogy a karakterláncok ASCII karakterek-e: str.isascii()

A Python 3.7 hozzáadta az isascii() funkciót. Igazat ad vissza, ha a karakterláncban minden karakter ASCII karakter.

A számok és betűk mellett az olyan szimbólumok is igazak, mint a + és a -.

s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False

A nem ASCII hiragana és más karakterek hamisak.

s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True

Mint a következőkben látni fogjuk, a többi módszerrel ellentétben az isascii() még üres karakterlánc esetén is igazat ad vissza.

Az üres karakterlánc megítélése

Az üres karakterlánc az isascii() esetében igaz, a többi módszer esetében pedig hamis.

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

A bool() segítségével állapíthatjuk meg, hogy üres karakterláncról van-e szó. A visszatérési érték üres karakterlánc esetén false, ellenkező esetben true.

print(bool(''))
# False

print(bool('abc123'))
# True

Annak meghatározása, hogy a karakterláncok számokká konvertálhatók-e

A negatív vagy tört értékű karakterláncok pontokat vagy mínusz jeleket tartalmaznak. Ezért az eredmény az isascii() kivételével minden módszer esetében hamis.

Bár az isascii() esetében igaz, nem alkalmas annak meghatározására, hogy egy karakterlánc numerikus értékké alakítható-e, mivel akkor is igaz, ha más szimbólumokat vagy alfabetikus karaktereket tartalmaz.

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

A karakterláncok a float() segítségével alakíthatók át lebegőpontos számokká. Hiba a nem konvertálható karakterláncok esetén.

print(float('-1.23'))
# -1.23

print(type(float('-1.23')))
# <class 'float'>

# print(float('abc'))
# ValueError: could not convert string to float: 'abc'

Kivételkezeléssel definiálható egy olyan függvény, amely igazat ad vissza, ha egy karakterlánc a float() függvénnyel konvertálható.

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

Ha meg akarod határozni, hogy egy vesszővel elválasztott szám is igaz, a replace() segítségével távolítsd el a vesszőt (cseréld le üres karakterlánccal).

def is_num_delimiter(s):
    try:
        float(s.replace(',', ''))
    except ValueError:
        return False
    else:
        return True

print(is_num_delimiter('10,000,000'))
# True

Ha támogatni szeretné a szóközök elválasztását, akkor a replace() funkciót tovább használhatja.

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
Copied title and URL