2012-06-25 18 views
2

一些這發現,如果給定的字符串是一個字,一個字或鑑於此字符串</p> <pre><code>random_string= '4' </code></pre> <p>我想以確定其整數,字符或只是我雖然我可以做一個字 在python

test = int(random_string) 
isinstance(test,int) == True 

,但我意識到,如果random_string不包含數字,我將有一個錯誤

基本random_string可以的形式

random_string ='hello' 
random_string ='H' 
random_string ='r' 
random_string ='56' 

任何人都知道一個辦法做到這一點,那種迷茫,用於確定其是一個字符我所做的就是

chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
random_string in chars == True 

我做了另一個字符串來檢查,如果它是一個小寫字母。 也檢查是否它的一個字,我拿了字符串的長度,如果長度超過一個,我確定它是一個字或數字

問題是我如何檢查是否它的一個字或一個號碼

請幫忙

+0

'in'就像子字符串一樣工作,所以判斷它是否是字符的邏輯有點瑕疵(例如'ABC'就是字符)。 – wim

回答

4

字符串也有很多方法isalphaisdigit測試,如果他們分別由字母和數字組成,:

>>> 'hello'.isalpha() 
True 
>>> '123'.isdigit() 
True 

注意,他們只用空格或其他任何將檢查這些字符,這樣的字符串兩個返回false:

>>> 'hi there'.isalpha() 
False 

但是,如果你想要的值作爲一個數字,你最好只是用int。請注意,使用isinstance檢查結果是否確實是一個整數沒有意義。如果int(blah)成功,它將始終返回一個整數;如果字符串不代表整數,則會引發異常。

+0

'str.isupper()'和'str.islower()' – wim

2

隨你的選擇。

>>> '4'.isdigit() 
True 
>>> '-4'.isdigit() 
False 
>>> int('-4') 
-4 
>>> 'foo'.isdigit() 
False 
>>> int('foo') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: 'foo' 
2

爲了實現您的要求的邏輯,我想最Python的方式是使用異常處理:

try: 
    n = int(random_string) 
except ValueError: 
    if len(random_string) > 1: 
    # it's a word 
    else: 
    # it's a character (or the empty string) 

要檢查的情況下,你可以使用字符串方法islower()

0

爲了獲得更多的控制,ESP的情況下,如果你有一些類型的字符串,其內置的功能,不支持,你可以使用重 -

像下面定期EXP以檢查其一個數字 -

re.findall(r'^[-]?[0-9]*[\.]?[0-9]*$', s) 

及以下普通EXP檢查,如果它是一個字符串 -

r'^[a-zA-Z]+$' 

請注意,這只是爲了演示,您應該修改規則EXP按您的需求。

+0

數字正則表達式比只將它傳遞給'float'構造函數要快多少? –

+0

@ IgnacioVazquez-Abrams即使我們缺乏速度(我不確定),我們正在獲得靈活性。 – theharshest

相關問題