Python tillhandahåller flera strängmetoder för att avgöra och kontrollera om en sträng är numerisk eller alfabetisk.
Varje metod förklaras med exempelkod.
- Fastställer om en sträng är en decimalsiffra.:
str.isdecimal()
- Bestämma om en sträng är ett tal:
str.isdigit()
- Fastställer om en sträng är ett tecken som representerar ett tal.:
str.isnumeric()
- Bestämmer om strängen är alfabetisk:
str.isalpha()
- Bestämma om strängen är alfanumerisk:
str.isalnum()
- Avgör om strängar är ASCII-tecken.:
str.isascii()
- Dom över en tom sträng
- Bestämma om strängar kan omvandlas till siffror
För andra metoder än isascii() är en sträng som innehåller en tom sträng, följande symboler osv. falsk.
,
.
-
-1,23 osv., som ett numeriskt värde förklaras i slutet av detta avsnitt.
Regelbundna uttryck kan användas för att bestämma teckentyper på ett mer flexibelt sätt och för att extrahera relevanta teckentyper.
I följande artikel finns mer information om hur du fastställer följande
- Hur konverterar man en numerisk sträng (str) till ett tal (int, float)?
- Hur man bestämmer stora och små bokstäver
- RELATERAT:Konvertering av en sträng av siffror till numeriska värden i Python
- RELATERAT:Lista över strängmetoder för att manipulera fall i Python
- Fastställer om en sträng är en decimalsiffra.: str.isdecimal()
- Bestämma om en sträng är ett tal: str.isdigit()
- Fastställer om en sträng är ett tecken som representerar ett tal.: str.isnumeric()
- Bestämmer om strängen är alfabetisk: str.isalpha()
- Bestämma om strängen är alfanumerisk: str.isalnum()
- Avgör om strängar är ASCII-tecken.: str.isascii()
- Dom över en tom sträng
- Bestämma om strängar kan omvandlas till siffror
Fastställer om en sträng är en decimalsiffra.: str.isdecimal()
I isdecimal() är det sant om alla tecken är decimalsiffror, det vill säga tecken i den allmänna kategorin Nd i Unicode. Det är också sant för arabiska siffror med full bredd 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
Om det innehåller en symbol, t.ex. ett minustecken eller en punkt, är det falskt. Om du till exempel vill fastställa att en sträng som ”-1,23” är ett numeriskt värde kan du använda undantagshantering. Detta förklaras i slutet av det här avsnittet.
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
Bestämma om en sträng är ett tal: str.isdigit()
I isdigit() är förutom de tal som är sanna i isdecimal() även tal vars Unicode-egenskapsvärde Numeric_Type är Digit eller Decimal sanna.
Till exempel är ett överskrivet tal som representerar en kvadrat falskt i isdecimal() men sant i isdigit().
- ett tal i överskrift som representerar kvadraten
- ²
- '\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
Fastställer om en sträng är ett tecken som representerar ett tal.: str.isnumeric()
I isnumeric() är förutom de siffror som är sanna i isdigit() även siffror vars Unicode-egenskapsvärde Numeric_Type är Numeric sanna.
Bråk, romerska siffror och kinesiska siffror är också sanna.
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
Bestämmer om strängen är alfabetisk: str.isalpha()
I isalpha() är en egenskap för Unicodes allmänna kategori med något av följande sant.
Lm
Lt
Lu
Ll
Lo
Alfabetet, de kinesiska tecknen osv. kommer att vara sanna.
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
Arabiska siffror är falska, men kinesiska siffror är sanna eftersom de också är kinesiska tecken; nollor i kinesiska siffror är dock falska.
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
Romerska siffror är falska.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
Bestämma om strängen är alfanumerisk: str.isalnum()
I isalnum() är det sant om varje tecken är sant i någon av följande metoder som listats hittills.
isdecimal()
isdigit()
isnumeric()
isalpha()
Varje tecken utvärderas individuellt, så en sträng som innehåller bokstäver och siffror blir sann i isalnum() även om den blir falsk i alla andra 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
Avgör om strängar är ASCII-tecken.: str.isascii()
Python 3.7 lade till isascii(). Den returnerar sant om alla tecken i strängen är ASCII-tecken.
Förutom siffror och bokstäver finns även symboler som + och -.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
Icke-ASCII-hiragana och andra tecken är falska.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
Som vi kommer att se härnäst returnerar isascii(), till skillnad från de andra metoderna, sant även för en tom sträng.
Dom över en tom sträng
En tom sträng är sann för isascii() och falsk för de andra metoderna.
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
Använd bool() för att avgöra om det är en tom sträng. Returvärdet är falskt för en tom sträng och sant i annat fall.
print(bool(''))
# False
print(bool('abc123'))
# True
Bestämma om strängar kan omvandlas till siffror
Negativa strängar eller strängar med bråkvärden innehåller punkter eller minustecken. Därför är resultatet falskt för alla metoder utom isascii().
Även om det är sant för isascii() är det inte lämpligt för att avgöra om en sträng kan omvandlas till ett numeriskt värde, eftersom det är sant även om den innehåller andra symboler eller alfabetiska tecken.
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
Strängar kan konverteras till flyttal med float(). Fel för strängar som inte kan konverteras.
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 undantagshantering kan en funktion definieras som returnerar sant när en sträng kan konverteras 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
Om du vill fastställa att ett kommaseparerat tal också är sant använder du replace() för att ta bort kommat (ersätta det med en tom sträng).
def is_num_delimiter(s):
try:
float(s.replace(',', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter('10,000,000'))
# True
Om du vill ha stöd för avgränsning av vitrymder kan du använda replace() ytterligare.
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