web-dev-qa-db-ja.com

Python-文字列の最後の文字が数字かどうかを確認する

基本的に私はこれをどのように行うかを知りたいです。

文字列の例を次に示します。

string = "hello123"

文字列が数字で終わるかどうかを確認し、文字列が終わる数字を出力する方法を知りたいです。

この特定の文字列については、正規表現を使用して数字で終わるかどうかを判断し、string [:]を使用して「123」を選択できることを知っています。しかし、次のような文字列を持つファイルをループしている場合:

hello123
hello12324
hello12435436346

...その後、長さの違いによりstring [:]を使用して番号を選択できなくなります。皆さんが手助けするのに十分なことを明確に説明したと思います。ありがとう!

32
user2002290
import re
m = re.search(r'\d+$', string)
# if the string ends in digits m will be a Match object, or None otherwise.
if m is not None:
    print m.group()

\dは数字、\d+は、1桁以上の数字に一致することを意味します(貪欲:できるだけ多くの連続した文字に一致します)。そして$は、文字列の末尾に一致することを意味します。

50
Peter Graham

これは、文字列の中間にあるものを考慮しませんが、基本的に、最後の数字が数字の場合、数字で終わると言います。

In [4]: s = "hello123"

In [5]: s[-1].isdigit()
Out[5]: True

いくつかの文字列で:

In [7]: for s in ['hello12324', 'hello', 'hello1345252525', 'goodbye']:
   ...:     print s, s[-1].isdigit()
   ...:     
hello12324 True
hello False
hello1345252525 True
goodbye False

私は正規表現ソリューションを完全かつ完全にサポートしていますが、ここでは数値を取得できる1つの(見栄えの悪い)方法を示します。繰り返しますが、正規表現はここではるかに優れています:)

In [43]: from itertools import takewhile

In [44]: s = '12hello123558'

In [45]: r = s[-1::-1]

In [46]: d = [c.isdigit() for c in r]

In [47]: ''.join((i[0] for i in takewhile(lambda (x, y): y, Zip(r, d))))[-1::-1]
Out[47]: '123558'
20
RocketDonkey

別の解決策:stringの終わりを取り除くことができる0-9桁の数を確認し、その長さをstringへのインデックスとして使用して、数値を分割します。 (戻り値 ''の場合stringが数字で終わらない)。

In [1]: s = '12hello123558'

In [2]: s[len(s.rstrip('0123456789')):]
Out[2]: '123558'
4

これは、文字列が数字ではない何かで終わっている場合、単に空の文字列を返します。

import re
re.split('[^\d]', str)[-1]

空の文字列はfalsyであるため、意味をオーバーロードできます。

def getNumericTail(str):
    re.split('[^\d]', str)[-1]

def endsWithNumber(str):
    bool(getNumericTail(str))
1
kojiro

別の解決策:

a = "abc1323"
b = ""
for c in a[::-1]:
    try:
        b += str(int(c))
    except: 
        break

print b[::-1]
0
Thai Tran