Python bestimmt und überprüft, ob eine Zeichenkette numerisch oder alphabetisch ist

Geschäft

Python bietet mehrere String-Methoden, um festzustellen und zu überprüfen, ob ein String-Typ numerisch oder alphabetisch ist.

Jede Methode wird mit Beispielcode erläutert.

  • Ermittelt, ob eine Zeichenkette eine Dezimalstelle ist:str.isdecimal()
  • Bestimmen, ob eine Zeichenkette eine Zahl ist:str.isdigit()
  • Bestimmt, ob eine Zeichenkette ein Zeichen ist, das eine Zahl darstellt:str.isnumeric()
  • Ermittelt, ob die Zeichenkette alphabetisch ist:str.isalpha()
  • Ermitteln, ob die Zeichenfolge alphanumerisch ist:str.isalnum()
  • Bestimmt, ob Zeichenketten ASCII-Zeichen sind:str.isascii()
  • Beurteilung der leeren Zeichenkette
  • Feststellen, ob Zeichenketten in Zahlen umgewandelt werden können

Bei anderen Methoden als isascii() ist eine Zeichenfolge, die eine leere Zeichenfolge, die folgenden Symbole usw. enthält, falsch.

  • ,
  • .
  • -

-1,23 usw. als numerischer Wert wird am Ende dieses Abschnitts erläutert.

Reguläre Ausdrücke können verwendet werden, um Zeichentypen flexibler zu bestimmen und die relevanten Zeichentypen zu extrahieren.

Im folgenden Artikel finden Sie weitere Informationen darüber, wie Sie Folgendes bestimmen können

  • Konvertierung einer numerischen Zeichenkette (str) in eine Zahl (int, float)
  • Wie man Groß- und Kleinschreibung bestimmt

Ermittelt, ob eine Zeichenkette eine Dezimalstelle ist: str.isdecimal()

Bei isdecimal() ist es wahr, wenn alle Zeichen Dezimalziffern sind, d. h. Zeichen der allgemeinen Kategorie Nd von Unicode. Dies gilt auch für arabische Ziffern in voller Breite usw.

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

Wenn sie ein Symbol wie ein Minuszeichen oder einen Punkt enthält, ist sie falsch. Wenn Sie zum Beispiel feststellen wollen, dass eine Zeichenkette wie '-1.23' ein numerischer Wert ist, können Sie die Ausnahmebehandlung verwenden. Dies wird am Ende dieses Abschnitts erklärt.

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

Bestimmen, ob eine Zeichenkette eine Zahl ist: str.isdigit()

In isdigit() sind zusätzlich zu den Zahlen, die in isdecimal() wahr sind, auch Zahlen wahr, deren Unicode-Eigenschaftswert Numeric_Type Digit oder Decimal ist.

So ist beispielsweise eine hochgestellte Zahl, die ein Quadrat darstellt, in isdecimal() falsch, in isdigit() aber wahr.

  • hochgestellte Zahl, die das Quadrat darstellt
    • ²
    • '\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

Bestimmt, ob eine Zeichenkette ein Zeichen ist, das eine Zahl darstellt: str.isnumeric()

In isnumeric() sind zusätzlich zu den Zahlen, die in isdigit() wahr sind, auch Zahlen wahr, deren Unicode-Eigenschaftswert Numeric_Type gleich Numeric ist.

Auch Brüche, römische und chinesische Ziffern sind richtig.

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

Ermittelt, ob die Zeichenkette alphabetisch ist: str.isalpha()

In isalpha() ist eine allgemeine Unicode-Kategorie-Eigenschaft mit einer der folgenden Eigenschaften wahr.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Das Alphabet, die chinesischen Schriftzeichen usw. werden richtig sein.

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 Ziffern sind falsch, aber chinesische Ziffern sind wahr, weil sie auch chinesische Schriftzeichen sind; die Nullen in chinesischen Ziffern sind jedoch falsch.

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

Römische Ziffern sind falsch.

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

Ermitteln, ob die Zeichenfolge alphanumerisch ist: str.isalnum()

In isalnum() ist es wahr, wenn jedes Zeichen in einer der folgenden, bisher aufgeführten Methoden wahr ist.

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

Jedes Zeichen wird einzeln ausgewertet, so dass eine Zeichenfolge, die Buchstaben und Zahlen enthält, in isalnum() wahr ist, auch wenn sie in allen anderen Methoden falsch ist.

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

Bestimmt, ob Zeichenketten ASCII-Zeichen sind: str.isascii()

In Python 3.7 wurde isascii() hinzugefügt. Sie gibt true zurück, wenn alle Zeichen in der Zeichenkette ASCII-Zeichen sind.

Neben Zahlen und Buchstaben sind auch Symbole wie + und – zutreffend.

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

Nicht-ASCII-Hiragana und andere Zeichen sind falsch.

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

Wie wir im Folgenden sehen werden, gibt isascii() im Gegensatz zu den anderen Methoden auch bei einer leeren Zeichenkette true zurück.

Beurteilung der leeren Zeichenkette

Eine leere Zeichenkette ist true für isascii() und false für die anderen Methoden.

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

Verwenden Sie bool(), um festzustellen, ob es sich um eine leere Zeichenkette handelt. Der Rückgabewert ist false für eine leere Zeichenkette und sonst true.

print(bool(''))
# False

print(bool('abc123'))
# True

Feststellen, ob Zeichenketten in Zahlen umgewandelt werden können

Negative oder gebrochene Wertestrings enthalten Punkte oder Minuszeichen. Daher ist das Ergebnis für alle Methoden außer isascii() falsch.

Obwohl es für isascii() zutrifft, ist es nicht geeignet, um festzustellen, ob eine Zeichenkette in einen numerischen Wert umgewandelt werden kann, da es auch dann zutrifft, wenn sie andere Symbole oder alphabetische Zeichen enthält.

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 können mit float() in Fließkommazahlen umgewandelt werden. Fehler bei Strings, die nicht konvertiert werden können.

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

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

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

Mit der Ausnahmebehandlung kann eine Funktion definiert werden, die true zurückgibt, wenn ein String mit float() konvertiert werden kann.

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

Wenn Sie feststellen wollen, dass eine durch Komma getrennte Zahl ebenfalls wahr ist, verwenden Sie replace(), um das Komma zu entfernen (durch eine leere Zeichenfolge zu ersetzen).

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

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

Wenn Sie die Begrenzung von Leerzeichen unterstützen wollen, können Sie replace() weiter verwenden.

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