66

文字列があるとします

string1 = "498results should get" 

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

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

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

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

4

10 に答える 10

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

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

>>> map(int, re.findall(r'\d+', string1))
[498]
于 2012-07-05T06:57:02.360 に答える
55

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

r = "456results string789"
s = ''.join(x for x in r if x.isdigit())
print int(s)
456789
于 2012-07-26T16:08:30.860 に答える
19

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

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

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

于 2016-05-24T11:07:35.317 に答える
10

イテレータのバージョン

>>> import re
>>> string1 = "498results should get"
>>> [int(x.group()) for x in re.finditer(r'\d+', string1)]
[498]
于 2012-07-05T07:02:32.077 に答える
7
>>> import itertools
>>> int(''.join(itertools.takewhile(lambda s: s.isdigit(), string1)))
于 2012-07-05T07:06:47.497 に答える
0

rstrip別のオプションは、 andを使用して末尾の文字を削除することstring.ascii_lowercaseです (文字を取得するため)。

import string
out = [int(s.replace(' ','').rstrip(string.ascii_lowercase)) for s in strings]

出力:

[498, 49867, 497543]
于 2022-02-01T23:40:18.647 に答える