2010-03-07 53 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 
相关问题