Python tarjoaa useita merkkijonomenetelmiä, joilla voidaan määrittää ja tarkistaa, onko merkkijonotyyppi numeerinen vai aakkosellinen.
Jokainen menetelmä selitetään esimerkkikoodin avulla.
- Määrittää, onko merkkijono desimaaliluku.:str.isdecimal()
- Sen määrittäminen, onko merkkijono numero:str.isdigit()
- Määrittää, onko merkkijono numeroa edustava merkki.:str.isnumeric()
- Määrittää, onko merkkijono aakkosellinen.:str.isalpha()
- Määritetään, onko merkkijono aakkosnumeerinen.:str.isalnum()
- Määrittää, ovatko merkkijonot ASCII-merkkejä.:str.isascii()
- Tyhjän merkkijonon tuomio
- Määritä, voidaanko merkkijonot muuntaa numeroiksi.
Muissa metodeissa kuin isascii() merkkijono, joka sisältää tyhjän merkkijonon, seuraavat symbolit jne., on false.
- ,
- .
- -
-1.23, jne., numeerisena arvona selitetään tämän jakson lopussa.
Säännöllisten lausekkeiden avulla voidaan määrittää merkkityypit joustavammin ja poimia asiaankuuluvat merkkityypit.
Seuraavassa artikkelissa on lisätietoja siitä, miten seuraavat asiat määritetään.
- Kuinka muuntaa numeerinen merkkijono (str) numeroksi (int, float)?
- Miten määritetään isot ja pienet kirjaimet
- RELATED:Lukujonon muuntaminen numeeriseksi arvoksi Pythonissa
- RELATED:Luettelo merkkijonomenetelmistä, joilla voidaan manipuloida tapauksia Pythonissa
- Määrittää, onko merkkijono desimaaliluku.: str.isdecimal()
- Sen määrittäminen, onko merkkijono numero: str.isdigit()
- Määrittää, onko merkkijono numeroa edustava merkki.: str.isnumeric()
- Määrittää, onko merkkijono aakkosellinen.: str.isalpha()
- Määritetään, onko merkkijono aakkosnumeerinen.: str.isalnum()
- Määrittää, ovatko merkkijonot ASCII-merkkejä.: str.isascii()
- Tyhjän merkkijonon tuomio
- Määritä, voidaanko merkkijonot muuntaa numeroiksi.
Määrittää, onko merkkijono desimaaliluku.: str.isdecimal()
Isdecimal()-komento on tosi, jos kaikki merkit ovat desimaalilukuja eli Unicoden yleiseen luokkaan Nd kuuluvia merkkejä. Se on totta myös täysleveille arabialaisille numeroille jne.
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
Jos se sisältää symbolin, kuten miinusmerkin tai pisteen, se on väärä. Jos esimerkiksi haluat määrittää, että merkkijono, kuten '-1.23', on numeerinen arvo, voit käyttää poikkeuskäsittelyä. Tämä selitetään tämän jakson lopussa.
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
Sen määrittäminen, onko merkkijono numero: str.isdigit()
Isdigit()-kohdassa isdecimal()-kohdassa todellisten lukujen lisäksi todellisia ovat myös luvut, joiden Unicode-ominaisuuden arvo Numeric_Type on Digit tai Decimal.
Esimerkiksi neliötä kuvaava ylinumero on väärä isdecimal()-toiminnossa, mutta tosi isdigit()-toiminnossa.
- neliötä kuvaava ylinumero
- ²
- '\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
Määrittää, onko merkkijono numeroa edustava merkki.: str.isnumeric()
isnumeric()-kohdassa isdigit()-kohdassa todellisten lukujen lisäksi todellisia ovat myös luvut, joiden Unicode-ominaisuuden arvo Numeric_Type on Numeric.
Myös murtoluvut, roomalaiset numerot ja kiinalaiset numerot ovat totta.
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
Määrittää, onko merkkijono aakkosellinen.: str.isalpha()
Isalpha()-kohdassa Unicode general category -ominaisuus, jolla on jokin seuraavista ominaisuuksista, on tosi.
- Lm
- Lt
- Lu
- Ll
- Lo
Aakkoset, kiinalaiset merkit jne. ovat totta.
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
Arabialaiset numerot ovat vääriä, mutta kiinalaiset numerot ovat oikeita, koska ne ovat myös kiinalaisia merkkejä; kiinalaisten numeroiden nollat ovat kuitenkin vääriä.
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
Roomalaiset numerot ovat vääriä.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
Määritetään, onko merkkijono aakkosnumeerinen.: str.isalnum()
Kohdassa isalnum() on tosi, jos jokainen merkki on tosi jossakin seuraavista tähän mennessä luetelluista menetelmistä.
- isdecimal()
- isdigit()
- isnumeric()
- isalpha()
Jokainen merkki arvioidaan erikseen, joten kirjaimia ja numeroita sisältävä merkkijono on tosi isalnum()-metodissa, vaikka se olisi väärä kaikissa muissa metodeissa.
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
Määrittää, ovatko merkkijonot ASCII-merkkejä.: str.isascii()
Python 3.7 lisäsi isascii(). Se palauttaa arvon true, jos kaikki merkkijonon merkit ovat ASCII-merkkejä.
Numeroiden ja kirjainten lisäksi myös symbolit, kuten + ja -, ovat totta.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
Muut kuin ASCII-hiragana- ja muut merkit ovat vääriä.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
Kuten näemme seuraavaksi, toisin kuin muut metodit, isascii() palauttaa totuuden myös tyhjälle merkkijonolle.
Tyhjän merkkijonon tuomio
Tyhjä merkkijono on tosi isascii()-menetelmälle ja epätosi muille menetelmille.
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
Käytä bool()-toimintoa määrittääksesi, onko se tyhjä merkkijono. Paluuarvo on false, jos merkkijono on tyhjä, ja true, jos merkkijono on tyhjä.
print(bool(''))
# False
print(bool('abc123'))
# True
Määritä, voidaanko merkkijonot muuntaa numeroiksi.
Negatiiviset tai murtolukuiset merkkijonot sisältävät pisteitä tai miinusmerkkejä. Tämän vuoksi tulos on epätosi kaikilla menetelmillä paitsi isascii():lla.
Vaikka isascii() on tosi, se ei sovellu sen määrittämiseen, voidaanko merkkijono muuntaa numeeriseksi arvoksi, koska se on tosi, vaikka se sisältäisi muita symboleja tai aakkosmerkkejä.
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
Merkkijonot voidaan muuntaa liukuluvuiksi komennolla float(). Virhe merkkijonoille, joita ei voida muuntaa.
print(float('-1.23'))
# -1.23
print(type(float('-1.23')))
# <class 'float'>
# print(float('abc'))
# ValueError: could not convert string to float: 'abc'
Poikkeuskäsittelyn avulla voidaan määritellä funktio, joka palauttaa arvon true, kun merkkijono voidaan muuntaa funktiolla 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
Jos haluat määrittää, että pilkulla erotettu luku on myös tosi, käytä replace()-toimintoa pilkun poistamiseen (korvaa se tyhjällä merkkijonolla).
def is_num_delimiter(s):
    try:
        float(s.replace(',', ''))
    except ValueError:
        return False
    else:
        return True
print(is_num_delimiter('10,000,000'))
# True
Jos haluat tukea välilyöntien erottelua, voit käyttää lisäksi replace()-ohjelmaa.
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