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

时间:2011-04-07 07:33:49

标签: python

我有一个以数字开头的字符串(从0到9) 我知道我可以使用startswith()进行“或”10个测试用例,但可能有一个更简洁的解决方案

所以不要写

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

是否有更聪明/更有效的方式?

11 个答案:

答案 0 :(得分:124)

Python的string库有isdigit()方法:

string[0].isdigit()

答案 1 :(得分:24)


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

答案 2 :(得分:6)

您的代码不起作用;您需要or而不是||

尝试

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

strg[:1] in '0123456789'

或者,如果你真的对startswith感到疯狂,

strg.startswith(('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'))

答案 3 :(得分:5)

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

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

答案 4 :(得分:3)

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

答案 5 :(得分:2)

您还可以使用try...except

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

答案 6 :(得分:1)

以下是我的“答案”(在这里尝试独特,我实际上并不建议这个特殊情况: - )

使用 ord()特殊a <= b <= c表单:

//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 <= ca < b < c一样,是一种特殊的Python构造,它有点简洁:比较1 < 2 < 3(true)和1 < 3 < 2(false)和{{ 1}}(真)。这不是大多数其他语言的工作方式。)

使用regular expression

(1 < 3) < 2

答案 7 :(得分:1)

令人惊讶的是,经过这么长时间,仍然缺少最佳答案。

其他答案的缺点是使用.small-container { width: 150px; height: 50px; background-color: red; margin-left: 200px; } 选择第一个字符,但是如前所述,这会在空字符串上中断。

使用以下内容可以避免此问题,并且在我看来,它提供了我们所拥有选项中最漂亮,最易读的语法。它也不会使用正则表达式导入/填充):

[0]

答案 8 :(得分:0)

您可以使用regular expressions

您可以使用以下方法检测数字:

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

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

答案 9 :(得分:-2)

如果要以某种方式扩展方法的功能,请使用Regular Expressions

答案 10 :(得分:-5)

试试这个:

if string[0] in range(10):