2011-08-04 116 views
4

如何檢查字符串是否包含Python中的數字?在Python中檢查字符串數字

我有一個變量,我將其轉換爲浮點數,但我想讓if語句將其轉換爲浮點數,只有它只包含數字。

+0

還有一件事,變量中的數字就像是「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

我會使用一個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 + ".") 

然後將它們轉換爲浮點。

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'] 

正則表達式說,「找到的東西,最多到小數點後開始(」 ^「是指只在線的開始‘?’意味着高達一;小數被轉義以」 \ '所以它不會有'任何字符'的特殊正則表達式含義)並且有任意數量的數字。祝你好運!

2

爲什麼不爲此內置.isdigit()。結構緊湊,無try語句和超快:

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

當考慮誤差在Python處理,我相信這是尤達大師誰說,「有沒有嘗試做或不做。」