web-dev-qa-db-ja.com

Pythonで文字列から整数値を取得する方法は?

文字列があったとします

string1 = "498results should get" 

ここで、498などの文字列から整数値のみを取得する必要があります。ここでは、整数値が次の例のように増加する可能性があるため、list slicingを使用したくありません。

string2 = "49867results should get" 
string3 = "497543results should get" 

したがって、文字列から整数値のみを正確に同じ順序で取得したいと思います。それぞれ498,49867,497543からstring1,string2,string3のようになります。

誰でも私にこれを1行または2行で行う方法を教えてもらえますか?

>>> import re
>>> string1 = "498results should get"
>>> int(re.search(r'\d+', string1).group())
498

文字列に複数の整数がある場合:

>>> map(int, re.findall(r'\d+', string1))
[498]
89
jamylak

ChristopheD ここからの回答: https://stackoverflow.com/a/2500023/12256

r = "456results string789"
s = ''.join(x for x in r if x.isdigit())
print int(s)
456789
37
Sepero

複数の数値セットがある場合、これは別のオプションです

>>> import re
>>> print(re.findall('\d+', 'xyz123abc456def789'))
['123', '456', '789']

ただし、浮動小数点数の文字列には適していません。

12
jacanterbury

イテレータバージョン

>>> import re
>>> string1 = "498results should get"
>>> [int(x.group()) for x in re.finditer(r'\d+', string1)]
[498]
9
John La Rooy
>>> import itertools
>>> int(''.join(itertools.takewhile(lambda s: s.isdigit(), string1)))
7
Craig Citro

正規表現を使用しない場合のワンライナーは次のとおりです。

>>> ''.join(filter(str.isdigit, "1234GAgade5312djdl0"))

返却値:

'123453120'
6
Bobort
def function(string):  
    final = ''  
    for i in string:  
        try:   
            final += str(int(i))   
        except ValueError:  
            return int(final)  
print(function("4983results should get"))  
0
Kishor Subedi

python 3.6では、これらの2行はリストを返します(空の場合があります)

>>[int(x) for x in re.findall('\d+', your_string)]

に似ている

>>list(map(int, re.findall('\d+', your_string))
0
huseyin39