Подтвердить что ты не робот

Как определить, начинается ли строка с числа?

У меня есть строка, которая начинается с числа (от 0 до 9) Я знаю, что могу "или" 10 тестовых случаев с использованием startswith(), но, возможно, есть более аккуратное решение

поэтому вместо записи

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

Есть ли более умный/более эффективный способ?

4b9b3361

Ответ 1

Библиотека Python string имеет метод isdigit():

string[0].isdigit()

Ответ 2


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

Ответ 3

иногда вы можете использовать regex

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

Ответ 4

Ваш код не будет работать; вам нужно or вместо ||.

Try

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

или

strg[:1] in '0123456789'

или, если вы действительно сумасшедшие о startswith,

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

Ответ 5

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

Ответ 6

Вы также можете использовать try...except:

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

Ответ 7

Вот мои "ответы" (пытаясь быть уникальным здесь, я действительно не рекомендую ни для этого конкретного случая: -)

Используя 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 <= c, как и a < b < c, является специальной конструкцией Python, и это довольно аккуратно: сравните 1 < 2 < 3 (true) и 1 < 3 < 2 (false) и (1 < 3) < 2 (true). Это isn ' как он работает на большинстве других языков.)

Используя регулярное выражение:

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

Ответ 9

Вы можете использовать регулярные выражения.

Вы можете обнаружить цифры, используя:

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

Параметр [0-9] соответствует любой цифре, а ваша строка [: 1] соответствует первому символу вашей строки

Ответ 10

Попробуйте следующее:

if string[0] in range(10):