Python bepaalt en controleert of een string numeriek of alfabetisch is

Bedrijf

Python biedt verschillende string-methoden om te bepalen en te controleren of een string van het type numeriek of alfabetisch is.

Elke methode wordt uitgelegd met voorbeeldcode.

  • Bepaalt of een string een decimaal cijfer is:str.isdecimal()
  • Bepalen of een string een getal is:str.isdigit()
  • Bepaalt of een string een teken is dat een getal voorstelt:str.isnumeric()
  • Bepaalt of de string alfabetisch is:str.isalpha()
  • Bepaal of de string alfanumeriek is:str.isalnum()
  • Bepaalt of strings ASCII-tekens zijn:str.isascii()
  • Uitspraak van lege string
  • Bepaal of strings kunnen worden geconverteerd naar getallen

Voor andere methoden dan isascii(), is een string die een lege string bevat, de volgende symbolen, enz. vals.

  • ,
  • .
  • -

-1,23, enz., als numerieke waarde wordt uitgelegd aan het eind van dit hoofdstuk.

Reguliere expressies kunnen worden gebruikt om de karaktertypen flexibeler te bepalen en de relevante karaktertypen te extraheren.

Zie het volgende artikel voor meer informatie over hoe u het volgende kunt bepalen

  • Hoe een numerieke string (str) omzetten naar een getal (int, float)
  • Hoe bepaal ik hoofdletters en kleine letters?

Bepaalt of een string een decimaal cijfer is: str.isdecimal()

In isdecimal() is het waar als alle tekens decimale cijfers zijn, dat wil zeggen, tekens in de algemene categorie Nd van Unicode. Het is ook waar voor Arabische cijfers over de gehele breedte, enz.

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

Als het een symbool bevat, zoals een minteken of een punt, is het onwaar. Als u bijvoorbeeld wilt bepalen dat een tekenreeks zoals '-1.23' een numerieke waarde is, kunt u gebruik maken van uitzonderingsafhandeling. Dit wordt aan het eind van dit hoofdstuk uitgelegd.

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

Bepalen of een string een getal is: str.isdigit()

In isdigit() zijn, naast getallen die waar zijn in isdecimal(), ook getallen waarvan de Unicode-eigenschapswaarde Numeric_Type Cijfer of Decimaal is, waar.

Bijvoorbeeld, een superscript getal dat een vierkant voorstelt is vals in isdecimal() maar waar in isdigit().

  • superscript getal dat het kwadraat weergeeft
    • ²
    • “\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

Bepaalt of een string een teken is dat een getal voorstelt: str.isnumeric()

In isnumeric() zijn, naast getallen die waar zijn in isdigit(), ook getallen waarvan de Unicode eigenschapswaarde Numeric_Type is Numeric waar.

Breuken, Romeinse cijfers, en Chinese cijfers zijn ook waar.

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

Bepaalt of de string alfabetisch is: str.isalpha()

In isalpha(), een Unicode algemene categorie eigenschap met een van de volgende is waar.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Het alfabet, Chinese karakters, enz. zullen waar zijn.

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

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

Arabische cijfers zijn vals, maar Chinese cijfers zijn waar omdat het ook Chinese karakters zijn; nullen in Chinese cijfers zijn echter vals.

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

Romeinse cijfers zijn vals.

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

Bepaal of de string alfanumeriek is: str.isalnum()

In isalnum(), is het waar als elk karakter waar is in een van de volgende tot nu toe opgesomde methoden.

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

Elk teken wordt afzonderlijk geëvalueerd, dus een tekenreeks die letters en cijfers bevat zal waar zijn in isalnum() zelfs als het vals is in alle andere methodes.

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

Bepaalt of strings ASCII-tekens zijn: str.isascii()

Python 3.7 voegde isascii() toe. Deze geeft true terug als alle karakters in de string ASCII karakters zijn.

Naast cijfers en letters zijn ook symbolen als + en – waar.

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

Non-ASCII hiragana en andere tekens zijn vals.

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

Zoals we hierna zullen zien, in tegenstelling tot de andere methodes, retourneert isascii() waar, zelfs voor een lege string.

Uitspraak van lege string

Een lege string is waar voor isascii() en vals voor de andere methodes.

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

Gebruik bool() om te bepalen of het een lege string is. De return waarde is false voor een lege string en true anders.

print(bool(''))
# False

print(bool('abc123'))
# True

Bepaal of strings kunnen worden geconverteerd naar getallen

strings met negatieve of fractionele waarden bevatten punten of mintekens. Daarom is het resultaat vals voor alle methoden behalve isascii().

Hoewel waar voor isascii(), is het niet geschikt om te bepalen of een string kan worden geconverteerd naar een numerieke waarde, aangezien het ook waar is als het andere symbolen of alfabetische tekens bevat.

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

Teksten kunnen geconverteerd worden naar drijvende komma getallen met float(). Fout voor strings die niet kunnen worden geconverteerd.

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

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

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

Met uitzonderingsafhandeling kan een functie worden gedefinieerd die waar teruggeeft als een string kan worden geconverteerd met 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

Als je wilt bepalen dat een door komma's gescheiden getal ook waar is, gebruik dan replace() om de komma te verwijderen (te vervangen door een lege 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

Als je de scheiding van spaties wilt ondersteunen, kun je replace() verder gebruiken.

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