web-dev-qa-db-ja.com

Pythonで文字列が数字で始まるかどうかを知る方法は?

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

より賢い/より効率的な方法はありますか?

68
Illusionist

Pythonのstringライブラリにはisdigit()メソッドがあります:

string[0].isdigit()
132
plaes

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

コードは機能しません。 ||の代わりにorが必要です。

試して

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

または

strg[:1] in '0123456789'

または、startswithに本当に夢中なら、

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

時々、正規表現を使用できます

>>> import re
>>> re.search('^\s*[0-9]',"0abc")
<_sre.SRE_Match object at 0xb7722fa8>
5
kurumi
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
3
eyquem

try...exceptを使用することもできます:

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

ここに私の「答え」があります(ここでユニークにしようとしていますが、この特定のケースには実際にはお勧めしません:-)

を使用して 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
1
user166390

驚いたことに、このように長い時間が経過しても、まだベストアンサーが欠落しています。

他の答えの欠点は、[0]を使用して最初の文字を選択することですが、前述のように、これは空の文字列で中断します。

以下を使用することでこの問題を回避し、私の意見では、私たちが持っているオプションの最もきれいで読みやすい構文を提供します。また、正規表現でインポート/ botherもしません):

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

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

正規表現 を使用できます。

次を使用して数字を検出できます。

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

[0-9] parは任意の数字に一致し、yourstring [:1]は文字列の最初の文字に一致します

0
Tovi7