文字列内の数字または文字を検出するにはどうすればよいですか? ASCIIコードを使用していることは承知していますが、どの機能がそれらを利用していますか?
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
上記の関数は、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
上記の関数は、 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
関数のバージョンを選択します。
長さ1の文字列の場合は、単にisdigit()
またはisalpha()
を実行できます
文字列の長さが1より大きい場合は、次のような関数を作成できます。
def isinteger(a):
try:
int(a)
return True
except ValueError:
return False