Как сказать, если строка начинается с цифры?


У меня есть строка, которая начинается с цифры (от 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

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

10 58

10 ответов:

в Python string библиотека isdigit() способ:

string[0].isdigit()

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

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

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

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

попробовать

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

или

strg[:1] in '0123456789'

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

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

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

используя 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 (правда). Это не как это работает в большинстве других языков.)

С помощью регулярные выражение:

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

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

вы можете обнаружить цифры с помощью:

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

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

использовать Регулярные Выражения, Если вы собираетесь каким-то образом расширить функциональность метода.

попробуйте это:

if string[0] in range(10):