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

Ill*_*ist 74 python string digits

我有一个以数字开头的字符串(从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
Run Code Online (Sandbox Code Playgroud)

有更聪明/更有效的方式吗?

pla*_*aes 140

Python的string库有isdigit()方法:

string[0].isdigit()
Run Code Online (Sandbox Code Playgroud)

  • 看看我的答案,它不会因空字符串而中断:“string[:1].isdigit()” (6认同)
  • Python2的`string`**模块**没有方法,`isdigit`是`str`和`unicode`对象的方法. (4认同)
  • @plaes:-1,因为上面的PLUS,如果s ==""它会崩溃 (2认同)

jco*_*ctx 25

>>> string = '1abc'
>>> string[0].isdigit()
True
Run Code Online (Sandbox Code Playgroud)

  • 你可以尝试`string [:1] .isdigit()`,它会愉快地退出处理一个空字符串. (26认同)
  • 因为那不是我的答案; 如果程序员希望在空字符串上抛出异常,那么我的代码仍然会更好. (2认同)

Pas*_*ten 13

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

其他答案的缺点是[0]用于选择第一个字符,但如前所述,这会破坏空字符串。

使用以下内容可以绕过这个问题,并且在我看来,提供了我们拥有的选项的最漂亮和最易读的语法。它也不会导入/打扰正则表达式):

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

>>> string = ''
>>> string[:1].isdigit()
False
Run Code Online (Sandbox Code Playgroud)


kur*_*umi 7

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

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


Joh*_*hin 7

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

尝试

'0' <= strg[:1] <= '9'
Run Code Online (Sandbox Code Playgroud)

要么

strg[:1] in '0123456789'
Run Code Online (Sandbox Code Playgroud)

或者,如果你真的很疯狂startswith,

strg.startswith(('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'))
Run Code Online (Sandbox Code Playgroud)