Ответ 1
Библиотека Python string
имеет метод isdigit()
:
string[0].isdigit()
У меня есть строка, которая начинается с числа (от 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
Есть ли более умный/более эффективный способ?
Библиотека 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
вместо ||
.
Try
'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
(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
Используйте Регулярные выражения, если вы собираетесь как-то расширить функциональность метода.
Вы можете использовать регулярные выражения.
Вы можете обнаружить цифры, используя:
if(re.search([0-9], yourstring[:1])):
#do something
Параметр [0-9] соответствует любой цифре, а ваша строка [: 1] соответствует первому символу вашей строки
Попробуйте следующее:
if string[0] in range(10):