web-dev-qa-db-ja.com

Python文字列が数字か文字かを検出します

文字列内の数字または文字を検出するにはどうすればよいですか? ASCIIコードを使用していることは承知していますが、どの機能がそれらを利用していますか?

25
TriskelionKal

文字列がpositive数字(整数)およびアルファベットであるかどうかを確認します

str.isdigit() および str.isalpha() を使用して確認できます与えられた文字列が整数およびアルファベットであるかどうか。

サンプル結果:

# For alphabet
>>> 'A'.isdigit()
False
>>> 'A'.isalpha()
True

# For digit
>>> '1'.isdigit()
True
>>> '1'.isalpha()
False

正/負の文字列をチェック-整数/浮動小数点

str.isdigit()は、文字列がnegative数値またはfloat数値の場合、Falseを返します。例えば:

# returns `False` for float
>>> '123.3'.isdigit()
False
# returns `False` for negative number
>>> '-123'.isdigit()
False

negative整数と floatをチェックしたい場合は、次のようにチェックするカスタム関数:

def is_number(n):
    try:
        float(n)   # Type-casting the string to `float`.
                   # If string is not a valid `float`, 
                   # it'll raise `ValueError` exception
    except ValueError:
        return False
    return True

サンプル実行:

>>> is_number('123')    # positive integer number
True

>>> is_number('123.4')  # positive float number
True

>>> is_number('-123')   # negative integer number
True

>>> is_number('-123.4') # negative `float` number
True

>>> is_number('abc')    # `False` for "some random" string
False

番号の確認中に「NaN」(数字ではない)文字列を破棄します

上記の関数は、Pythonが数値ではないことを表す有効な浮動小数点数であるため、「NAN」(数値ではない)文字列に対してTrueを返します。例えば:

>>> is_number('NaN')
True

数値が「NaN」であるかどうかを確認するには、 math.isnan() を次のように使用できます。

>>> import math
>>> nan_num = float('nan')

>>> math.isnan(nan_num)
True

または、これを確認するために追加のライブラリをインポートしたくない場合は、==を使用してそれ自体と比較することで単純に確認できます。 Pythonは、False floatがそれ自体と比較されたときにnanを返します。例えば:

# `nan_num` variable is taken from above example
>>> nan_num == nan_num
False

したがって、上記の関数is_numberは、"NaN"に対してFalseを返すように更新できます。

def is_number(n):
    is_number = True
    try:
        num = float(n)
        # check for "nan" floats
        is_number = num == num   # or use `math.isnan(num)`
    except ValueError:
        is_number = False
    return is_number

サンプル実行:

>>> is_number('Nan')   # not a number "Nan" string
False

>>> is_number('nan')   # not a number string "nan" with all lower cased
False

>>> is_number('123')   # positive integer
True

>>> is_number('-123')  # negative integer
True

>>> is_number('-1.12') # negative `float`
True

>>> is_number('abc')   # "some random" string
False

「1 + 2j」のような複素数を有効な数として扱うことを許可します

上記の関数は、 complex number に対してFalseを返します。 is_number関数で複素数を有効な数値として扱うには、渡された文字列を型キャストする必要があります。 complex() の代わりに、 float() の代わりに。すると、is_number関数は次のようになります。

def is_number(n):
    is_number = True
    try:
        #      v type-casting the number here as `complex`, instead of `float`
        num = complex(n)
        is_number = num == num
    except ValueError:
        is_number = False
    return is_number

サンプル実行:

>>> is_number('1+2j')    # Valid 
True                     #      : complex number 

>>> is_number('1+ 2j')   # Invalid 
False                    #      : string with space in complex number represetantion
                         #        is treated as invalid complex number

>>> is_number('123')     # Valid
True                     #      : positive integer

>>> is_number('-123')    # Valid 
True                     #      : negative integer

>>> is_number('abc')     # Invalid 
False                    #      : some random string, not a valid number

>>> is_number('nan')     # Invalid
False                    #      : not a number "nan" string

PS:数値のタイプに応じた各チェックの各操作には、追加のオーバーヘッドが伴います。要件に合ったis_number関数のバージョンを選択します。

57

長さ1の文字列の場合は、単にisdigit()またはisalpha()を実行できます

文字列の長さが1より大きい場合は、次のような関数を作成できます。

def isinteger(a):
    try:
        int(a)
        return True
    except ValueError:
        return False
2
esquarer