Python indeholder flere strengmetoder til at bestemme og kontrollere, om en strengtype er numerisk eller alfabetisk.
Hver metode er forklaret med kodeeksempler.
- Bestemmer, om en streng er et decimaltal:
str.isdecimal()
- Afgørelse af, om en streng er et tal:
str.isdigit()
- Bestemmer, om en streng er et tegn, der repræsenterer et tal:
str.isnumeric()
- Bestemmer, om en streng er alfabetisk:
str.isalpha()
- Bestem, om strengen er alfanumerisk:
str.isalnum()
- Bestemmer, om strenge er ASCII-tegn:
str.isascii()
- Bedømmelse af en tom streng
- Afgøre, om strenge kan konverteres til tal
For andre metoder end isascii() er en streng, der indeholder en tom streng, følgende symboler osv., falsk.
,
.
-
-1,23 osv., som en numerisk værdi, forklares i slutningen af dette afsnit.
Regelmæssige udtryk kan bruges til at bestemme tegentyper mere fleksibelt og til at udtrække de relevante tegentyper.
Se følgende artikel for at få flere oplysninger om, hvordan du kan bestemme følgende
- Sådan konverteres en numerisk streng (str) til et tal (int, float)
- Hvordan man bestemmer store og små bogstaver
- RELATERET:Konvertering af en talstreng til numeriske værdier i Python
- RELATERET:Liste over strengmetoder til at manipulere case i Python
- Bestemmer, om en streng er et decimaltal: str.isdecimal()
- Afgørelse af, om en streng er et tal: str.isdigit()
- Bestemmer, om en streng er et tegn, der repræsenterer et tal: str.isnumeric()
- Bestemmer, om en streng er alfabetisk: str.isalpha()
- Bestem, om strengen er alfanumerisk: str.isalnum()
- Bestemmer, om strenge er ASCII-tegn: str.isascii()
- Bedømmelse af en tom streng
- Afgøre, om strenge kan konverteres til tal
Bestemmer, om en streng er et decimaltal: str.isdecimal()
I isdecimal() er det sandt, hvis alle tegn er decimale cifre, dvs. tegn i den generelle kategori Nd i Unicode. Det er også sandt for arabiske tal i fuld bredde osv.
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
Hvis det indeholder et symbol som f.eks. et minustegn eller et punktum, er det falsk. Hvis du f.eks. ønsker at bestemme, at en streng som “-1,23” er en numerisk værdi, kan du bruge undtagelsesbehandling. Dette forklares i slutningen af dette afsnit.
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
Afgørelse af, om en streng er et tal: str.isdigit()
I isdigit() er ud over de tal, der er sande i isdecimal(), også tal, hvis Unicode-egenskabsværdi Numeric_Type er Digit eller Decimal, sande.
F.eks. er et tal med overskrift, der repræsenterer et kvadrat, falsk i isdecimal(), men sandt i isdigit().
- tal i overstregning, der repræsenterer kvadratet
- ²
- '\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
Bestemmer, om en streng er et tegn, der repræsenterer et tal: str.isnumeric()
I isnumeric() er ud over de tal, der er sande i isdigit(), også tal, hvis Unicode-egenskabsværdi Numeric_Type er Numeric, sande.
Brøker, romertal og kinesiske tal er også rigtige.
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
Bestemmer, om en streng er alfabetisk: str.isalpha()
I isalpha() er en egenskab for en generel Unicode-kategori med en af følgende egenskaber sand.
Lm
Lt
Lu
Ll
Lo
Alfabetet, de kinesiske tegn osv. vil være sandt.
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
Arabiske tal er falske, men kinesiske tal er sande, fordi de også er kinesiske tegn; nuller i kinesiske tal er imidlertid falske.
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
Romertal er falske.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
Bestem, om strengen er alfanumerisk: str.isalnum()
I isalnum() er det sandt, hvis hvert tegn er sandt i en af de følgende metoder, der er anført indtil nu.
isdecimal()
isdigit()
isnumeric()
isalpha()
Hvert tegn evalueres individuelt, så en streng, der indeholder bogstaver og tal, vil være sand i isalnum(), selv om den er falsk i alle andre metoder.
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
Bestemmer, om strenge er ASCII-tegn: str.isascii()
Python 3.7 tilføjede isascii(). Den returnerer sandt, hvis alle tegn i strengen er ASCII-tegn.
Ud over tal og bogstaver er symboler som + og – også gyldige.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
Ikke-ASCII hiragana og andre tegn er falske.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
Som vi vil se næste gang, returnerer isascii(), i modsætning til de andre metoder, sandt selv for en tom streng.
Bedømmelse af en tom streng
En tom streng er sand for isascii() og falsk for de andre metoder.
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
Brug bool() til at bestemme, om det er en tom streng. Returværdien er false for en tom streng og true ellers.
print(bool(''))
# False
print(bool('abc123'))
# True
Afgøre, om strenge kan konverteres til tal
Negative eller brøkdelstrenge indeholder punkter eller minustegn. Derfor er resultatet falsk for alle metoder undtagen isascii().
Selv om den er sand for isascii(), er den ikke egnet til at bestemme, om en streng kan konverteres til en numerisk værdi, da den er sand, selv om den indeholder andre symboler eller alfabetiske tegn.
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
Strings kan konverteres til flydende tal med float(). Fejl for strings, der ikke kan konverteres.
print(float('-1.23'))
# -1.23
print(type(float('-1.23')))
# <class 'float'>
# print(float('abc'))
# ValueError: could not convert string to float: 'abc'
Med undtagelseshåndtering kan der defineres en funktion, der returnerer sandt, når en streng kan konverteres med 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
Hvis du vil bestemme, at et tal adskilt af kommaer også er sandt, skal du bruge replace() til at fjerne kommaet (erstatte det med en tom streng).
def is_num_delimiter(s):
try:
float(s.replace(',', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter('10,000,000'))
# True
Hvis du ønsker at understøtte afgrænsning af mellemrum, kan du bruge replace() yderligere.
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