如何判断string是否以数字开头?

我有一个string,从数字开始(从0-9)我知道我可以“或”使用startswith()的10个testing用例,但可能是一个整洁的解决scheme

所以而不是写作

if (string.startswith('0') || string.startswith('2') || string.startswith('3') || string.startswith('4') || string.startswith('5') || string.startswith('6') || string.startswith('7') || string.startswith('8') || string.startswith('9')): #do something 

有一个更聪明/更有效的方法吗?

Python的string库有isdigit()方法:

 string[0].isdigit() 
 >>> string = '1abc' >>> string[0].isdigit() True 

有时候,你可以使用正则expression式

 >>> import re >>> re.search('^\s*[0-9]',"0abc") <_sre.SRE_Match object at 0xb7722fa8> 

你的代码不会工作。 你需要or代替||

尝试

 '0' <= strg[:1] <= '9' 

要么

 strg[:1] in '0123456789' 

或者,如果你真的为启动而疯狂,

 strg.startswith(('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')) 
 for s in ("fukushima", "123 is a number", ""): print s.ljust(20), s[0].isdigit() if s else False 

结果

 fukushima False 123 is a number True False 

你也可以用try...except

 try: int(string[0]) # do your stuff except: pass # or do your stuff 

这里是我的“答案”(试图在这里是独一无二的,我实际上不build议这种特殊情况:-)

运用 ord()和 特殊的a <= b <= cforms:

 //starts_with_digit = ord('0') <= ord(mystring[0]) <= ord('9') //I was thinking too much in C. Strings are perfectly comparable. starts_with_digit = '0' <= mystring[0] <= '9' 

(这个a <= b <= c ,就像a < b < c ,是一个特殊的Python结构,比较1 < 2 < 3 (true)和1 < 3 < 2 (false)和(1 < 3) < 2 (true)。这不是在大多数其他语言中的工作原理。)

使用正则expression式 :

 import re //starts_with_digit = re.match(r"^\d", mystring) is not None //re.match is already anchored starts_with_digit = re.match(r"\d", mystring) is not None 

使用正则expression式 ,如果你要以某种方式扩展方法的function。

你可以使用正则expression式 。

您可以使用以下方式检测数字

 if(re.search([0-9], yourstring[:1])): #do something 

[0-9]参数匹配任何数字,而yourstring [:1]匹配string的第一个字符

尝试这个:

 if string[0] in range(10):