如何从Python中的字符串中获取整数值?

时间:2012-07-05 06:55:21

标签: python string integer

假设我有一个字符串

string1 = "498results should get" 

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

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

所以我想从字符串中仅以相同的顺序获取整数值。我的意思分别来自498,49867,497543的{​​{1}}。

任何人都可以通过一两行告诉我如何做到这一点吗?

9 个答案:

答案 0 :(得分:86)

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

如果字符串中有多个整数:

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

答案 1 :(得分:34)

ChristopheD处获得的答案:https://stackoverflow.com/a/2500023/1225603

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

答案 2 :(得分:12)

如果您有多组数字,那么这是另一种选择

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

虽然它对浮点数字符串没有好处。

答案 3 :(得分:8)

迭代器版本

>>> import re
>>> string1 = "498results should get"
>>> [int(x.group()) for x in re.finditer(r'\d+', string1)]
[498]

答案 4 :(得分:7)

>>> import itertools
>>> int(''.join(itertools.takewhile(lambda s: s.isdigit(), string1)))

答案 5 :(得分:6)

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

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

返回:

'123453120'

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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

相似
>>list(map(int, re.findall('\d+', your_string))

答案 8 :(得分: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]