117

数字(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

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

4

12 に答える 12

211

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

string[0].isdigit()
于 2011-04-07T07:37:03.563 に答える
30
>>> string = '1abc'
>>> string[0].isdigit()
True
于 2011-04-07T07:37:03.597 に答える
14

驚くべきことに、そのような長い時間の後に、まだ最良の答えが欠けています。

他の回答の欠点は[0]、最初の文字を選択するために使用することですが、前述のように、これは空の文字列で壊れます。

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

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

>>> string = ''
>>> string[:1].isdigit()
False
于 2019-08-09T14:11:10.723 に答える
11

時々、あなたは正規表現を使うことができます

>>> import re
>>> re.search('^\s*[0-9]',"0abc")
<_sre.SRE_Match object at 0xb7722fa8>
于 2011-04-07T07:38:55.880 に答える
9

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

試す

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

また

strg[:1] in '0123456789'

または、あなたが本当に夢中になっている場合はstartswith

strg.startswith(('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'))
于 2011-04-07T09:35:41.940 に答える
4

このコード:

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
于 2011-05-06T19:07:56.037 に答える
2

また、使用することができますtry...except

try:
    int(string[0])
    # do your stuff
except:
    pass # or do your stuff
于 2017-07-26T16:42:47.543 に答える
1

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

使用する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
于 2011-04-07T07:41:21.237 に答える
1

組み込みの文字列モジュールを使用する:

>>> import string
>>> '30 or older'.startswith(tuple(string.digits))

受け入れられた答えは、単一の文字列に対してうまく機能します。pandas.Series.str.containsで動作する方法が必要でした。正規表現を使用したり、あまり知られていないように見えるモジュールをうまく使用したりするよりも、間違いなく読みやすくなっています。

于 2022-02-24T13:09:53.840 に答える
0

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

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

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

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

于 2011-04-07T07:43:20.867 に答える
-2

メソッドの機能を何らかの方法で拡張する場合は、正規表現を使用します。

于 2011-04-07T07:39:17.440 に答える
-5

これを試して:

if string[0] in range(10):
于 2011-04-07T07:35:55.720 に答える