2011-08-04 6 views
4

文字列にPythonの数値が含まれているかどうかをチェックする方法は?Pythonの数値の文字列を確認する

フロートに変換する変数がありますが、ifステートメントを作成して、数値だけが含まれている場合にのみfloatに変換します。

+0

もう1つ、変数の数値は "0.123"と同じです – Marko

+0

これはまだ浮動小数点への変換に有効です –

答えて

9

これを変換し、失敗した場合は例外をキャッチします。

s = "3.14" 
try: 
    val = float(s) 
except ValueError: 
    val = None 
+0

これは最速のアプローチだと思います。 – Profane

+1

これは、** "NaN" **(数字ではない)を通します。 'math.isnan(s)'を使用して明示的にチェックする。 – razz0

+1

@ razz0は良い点です。このアプローチでは、 "inf"と "-inf"を通すこともできます。これは数字でもありません。これらは 'math.isinf'でチェックできます。数字ではありませんが、3つすべてが有効な浮動小数点数なので、浮動小数点数を含めるかどうかは、おそらくそれらの浮動小数点数の使用目的に依存します。 –

3

try-exceptブロックを使用して数字であるかどうかを判断します。そうすれば、sが数値の場合はキャストは成功し、そうでなければValueErrorをキャッチしてプログラムが中断しないようにします。

def is_number(s): 
    try: 
     float(s) 
     return True 
    except ValueError: 
     return False 
+1

あなたが一番説明したので、あなたの答えはより良いです!マイケルとハンターの両方に感謝します! – Marko

2

また、文字列から数値を抽出することもできます。

import string 
extract_digits = lambda x: "".join(char for char in x if char in string.digits + ".") 

です。その後、floatに変換します。不要なロジックはありませんので、

to_float = lambda x: float(x) if x.count(".") <= 1 else None 

>>> token = "My pants got 2.5 legs" 
>>> extract_digits(token) 
'2.5' 
>>> to_float(_) 
2.5 
>>> token = "this is not a valid number: 2.5.52" 
>>> extract_digits(token) 
'2.5.52' 
>>> to_float(_) 
None 
1

マイケル・バーバーの答えはスピードのために最善となります。何らかの理由でより詳細な評価が必要な場合は、Python標準ライブラリの正規表現モジュールを使用できます。たとえば、記述したような番号を取得したいが、レイヤーを追加する基準があると決めた場合は、これが役に立ちます。

import re 
mystring = '.0323asdffa' 

def find_number_with_or_without_decimal(mystring): 
    return re.findall(r"^\.?\d+", mystring) 

In [1]: find_number_with_or_without_decimal(mystring) 
Out[1]: ['.0323'] 

正規表現は、言う「1つまでの小数で始まるものを見つける(」^「のみ行の先頭に意味し、 『』 1までを意味し、小数点以下がでエスケープされ」?\ 'それで特別な正規表現の意味は「任意の文字」ではないでしょう)、任意の桁数を持ちます。 Pythonで幸運を祈る!

2

組み込みの.isdigit()がこれに該当しないのはなぜですか。コンパクト、超高速なしtry文、および:

string = float(string) if string.isdigit() else string 

Pythonでのエラー処理を考慮すると、私はそれは、言った誰マスターヨーダだったと信じていない「無試しがありませんか、またはしないでください。」

関連する問題