66

假设我有一个字符串

string1 = "498results should get" 

现在我只需要从字符串中获取整数值,例如498. 在这里我不想使用list slicing,因为整数值可能会像这些示例一样增加:

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

因此,我只想以完全相同的顺序从字符串中获取整数值。我的意思是分别498,49867,497543来自string1,string2,string3

谁能让我知道如何在一两行中做到这一点?

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 回答
24

这是您的单线,不使用任何正则表达式,有时会变得昂贵:

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

返回:

'123453120'
于 2016-11-17T18:54:05.007 回答
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 回答
3

使用 python 3.6,这两行返回一个列表(可能为空)

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

如同

>>list(map(int, re.findall('\d+', your_string))
于 2018-05-16T15:50:39.340 回答
0
def function(string):  
    final = ''  
    for i in string:  
        try:   
            final += str(int(i))   
        except ValueError:  
            return int(final)  
print(function("4983results should get"))  
于 2017-10-30T15:20:20.827 回答
0

这种方法使用列表推导,只需将字符串作为参数传递给函数,它将返回该字符串中的整数列表。

def getIntegers(string):
        numbers = [int(x) for x in string.split() if x.isnumeric()]
        return numbers

像这样

print(getIntegers('this text contains some numbers like 3 5 and 7'))

输出

[3, 5, 7]
于 2021-07-05T05:34:00.337 回答
0

另一种选择是使用rstrip和删除尾随字母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 回答