2010-03-07 52 views

回答

35

如果你想匹配的非ASCII字符,以及,你可以這樣做:

if line and line[0].isalpha(): 
+0

+1,這是最好的解決方案,尤其是如果包裝在一個函數中,或者甚至包含一些驗證類的方法。 – 2010-03-07 10:58:55

+0

當然,行必須是非Ascii部分才能工作的unicode對象。 – u0b34a0f6ae 2010-03-07 11:39:54

+13

甚至更​​短:'if line [:1] .isalpha():' – 2010-03-07 11:47:53

5

一個簡單的解決辦法是使用Python正則表達式模塊:

import re 
if re.match("^[a-zA-Z]+.*", line): 
    Do Something 
+0

-1:使用正則表達式是大規模overkil l爲此任務。你也只需要檢查第一個字符 - 這個正則表達式會嘗試匹配整個字符串,這可能會很長。 – 2010-03-07 10:12:07

+5

即使你被迫使用re模塊,你所需要的只是'[a-zA-Z]'。 '^'是對按鍵的浪費(閱讀關於'search'和'match'之間區別的docs部分)。 '+'是時間的微小浪費(如果字符串在開始時有很多字母,則是主要的);一個字母就夠了。 '。*'是浪費2次擊鍵,可能還有更多時間。 – 2010-03-07 10:53:17

8

您可以傳遞一個元組startswiths()(在Python 2.5+)來匹配任何元素:

import string 
ALPHA = string.ascii_letters 
if line.startswith(tuple(ALPHA)): 
    pass 

當然,對於這種簡單的情況下,一個正則表達式測試或操作者in會更具有可讀性。

+0

我不知道。 +1不是針對這個問題的最佳答案,而是因爲這對我自己的代碼來說是最好的答案。謝謝。 – DaveTheScientist 2012-05-09 21:27:45

3

這可能是最有效的方法:

if line != "" and line[0].isalpha(): 
    ... 
+0

+1,這是最好的解決方案,尤其是如果包裝在函數中,或者甚至包含某種驗證類的方法。 – 2010-03-07 10:14:58

+5

爲什麼你認爲這比'if line和line [0] .isalpha():'更好? – 2010-03-07 10:35:31

-1

,如果你不關心空白在字符串的前面,

if line and line.lstrip()[0].isalpha(): 
0
if line.startswith((chr(x) for x in range(ord('a'), ord('z')+1)+range(ord('A'), ord('Z')+1)): 
    # do processsing 
    pass 
相關問題