Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Python判断字符串是否以数字开头?_Python_String_Digits - Fatal编程技术网

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

如何用Python判断字符串是否以数字开头?,python,string,digits,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') || strin

我有一个以数字(从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
有更聪明/更有效的方法吗?

试试这个:

if string[0] in range(10):

Python的
string
库具有
isdigit()
方法:

string[0].isdigit()

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

>>> import re
>>> re.search('^\s*[0-9]',"0abc")
<_sre.SRE_Match object at 0xb7722fa8>
>>重新导入
>>>重新搜索(“^\s*[0-9]”,“0abc”)
如果您打算以某种方式扩展该方法的功能,请使用。

以下是我的“答案”(在这里尽量保持唯一性,对于这种特殊情况,我实际上不建议:-)

使用和您可以使用的特殊
a

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

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

与[0~9] PAR匹配任何数字,YouString(:1)匹配字符串

< p>的第一个字符。您需要
而不是
|

试一试

或者,如果您真的非常喜欢使用
启动

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…,但
除外:

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

令人惊讶的是,经过这么长时间,仍然没有找到最好的答案

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

使用下面的方法可以避免这个问题,在我看来,它提供了我们所拥有的选项中最漂亮、最可读的语法。它也不会导入/使用正则表达式):



这根本不起作用
range(10)
生成一个整数列表,而
string[0]
是长度为1的字符串。这不起作用;类型不匹配。但是:
如果map(str,range(10))
worksI不是python人,那么您也许可以在以下方面帮助我:如果没有
string[0]
?是的,它肯定会的。您可以使用(string或“x”)[0].isdigit()来修复“”或none。您可以尝试
string[:1].isdigit()
,它将愉快地退出并处理空字符串。因为这不是我的答案;当程序员希望在空字符串上抛出异常时,我的情况更好。@jcomeau_ictx完全正确。永远不要防御计划。如果字符串意外为空,则应该出错,并且无论如何都不应该自动处理。一些学派认为,您应该优雅地处理和捕获那些不重要的异常作为警告,并保持程序运行。对于大多数用例,我不是这种心态。您正在编写的函数和代码的特殊性有助于减少需要更频繁地进行防御性编码的边缘情况。如果有人问:“这太重复了吗?”,用高级语言来说,答案是“为什么,是的,确实如此”。您错过了
string.startswith('1')
@Illusionist正如所写,您的问题意味着您想要检测仅以一个数字开头的字符串。如果是这样的话,下面这些答案中唯一正确的答案不是使用
s[0]
s[:1]
的答案,而是John Machin的解决方案:
如果s.startswith(tuple('0123456789'))
。此外,当s是一个类似元组或列表的序列时,这种解决方案会产生错误,这种情况下会产生与字符串相同的结果。-另一个解决方案是一个模式为“\d(?=\d)”的正则表达式,但在这里使用正则表达式是多余的。只是学究:
string
是标准库中的一个模块,可能不应该用作变量名。(1) 丢失正则表达式中的
ord()
(2)丢失
^
。Python2的
string
模块没有方法,
isdigit
str
unicode
对象的一种方法。@plaes:-1是因为上述原因,如果s==”,它会崩溃看看我的答案,它不会因为一个空字符串而中断:
string[:1].isdigit()
overkill!如果你能在最短的时间内完成,为什么还要使用re呢bultins@JakobBowyer至少,知道这件事是件好事!即使在这种情况下,是的,如果一些内置函数也能做到这一点,正则表达式是多余的。使用
s[:1].isdigit()
s和s[0].isdigit()
@John Machin你说的“丑陋”是什么意思?不可读?我觉得你上面的观点更具可读性<代码>s和s[0]。在我看来,isdigit()
的可读性更低。就我个人而言,我喜欢这个结构。。。如果。。。其他的考虑到你的评论,我只想改进一下:
s[0].isdigit()如果s=“”否则为False
如果只有startswith(一个元组)的解决方案,我会投票给你。但是使用
strg[:1]
的解决方案有两个不便之处:如果s恰好是字符串列表,则不会引发错误;如果字符串以几个数字开头,则生成True。@eyquem如果字符串以几个数字开头,则生成True。那么?其他答案不检查这一点,因为它不需要检查其他字符是否为数字。我非常喜欢
startswith
,并在我的代码中以这种方式实现了它。谢谢,还有一个可能的开始
startswith(tuple(str(i)表示范围(10)内的i))
.isdigit()是首选
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:
    int(string[0])
    # do your stuff
except:
    pass # or do your stuff
>>> string = '1abc'
>>> string[:1].isdigit()
True

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