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
より賢い/より効率的な方法はありますか?
Pythonのstring
ライブラリにはisdigit()
メソッドがあります:
string[0].isdigit()
>>> string = '1abc'
>>> string[0].isdigit()
True
コードは機能しません。 ||
の代わりにor
が必要です。
試して
'0' <= strg[:1] <= '9'
または
strg[:1] in '0123456789'
または、startswith
に本当に夢中なら、
strg.startswith(('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'))
時々、正規表現を使用できます
>>> import re
>>> re.search('^\s*[0-9]',"0abc")
<_sre.SRE_Match object at 0xb7722fa8>
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)。これは、他のほとんどの言語では機能しません。)
正規表現 を使用:
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
驚いたことに、このように長い時間が経過しても、まだベストアンサーが欠落しています。
他の答えの欠点は、[0]
を使用して最初の文字を選択することですが、前述のように、これは空の文字列で中断します。
以下を使用することでこの問題を回避し、私の意見では、私たちが持っているオプションの最もきれいで読みやすい構文を提供します。また、正規表現でインポート/ botherもしません):
>>> string = '1abc'
>>> string[:1].isdigit()
True
>>> string = ''
>>> string[:1].isdigit()
False
正規表現 を使用できます。
次を使用して数字を検出できます。
if(re.search([0-9], yourstring[:1])):
#do something
[0-9] parは任意の数字に一致し、yourstring [:1]は文字列の最初の文字に一致します