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

Posted

技术标签:

【中文标题】如何从 Python 中的字符串中获取整数值?【英文标题】:How to get integer values from a string in Python? 【发布时间】:2012-07-05 13:19:39 【问题描述】:

假设我有一个字符串

string1 = "498results should get" 

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

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

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

谁能用一两行告诉我如何做到这一点?

【问题讨论】:

【参考方案1】:

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

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]

【讨论】:

【参考方案2】:

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

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

类似于

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

【讨论】:

【参考方案3】:
def function(string):  
    final = ''  
    for i in string:  
        try:   
            final += str(int(i))   
        except ValueError:  
            return int(final)  
print(function("4983results should get"))  

【讨论】:

不知道为什么你必须这样做 return int(final) 只是返回 return final 也可以。 你能解释一下是什么让它只带数字吗?【参考方案4】:

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

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

返回:

'123453120'

【讨论】:

【参考方案5】:

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

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

但它不适合浮点数字符串。

【讨论】:

【参考方案6】:
>>> import re
>>> string1 = "498results should get"
>>> int(re.search(r'\d+', string1).group())
498

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

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

【讨论】:

这不完全正确,是的,它会为字符串 starting 使用整数,但如果整数在字符串的中间,它不会这样做。也许使用int(re.search(r'\d+', string1).group()) 应该会更好 如果 string1(020) 3493,则失败。 是的,这是错误的代码,应该使用re.search @Hussain 好吧,这个例子只显示了前面的数字,但无论如何现在它都是安全的 这可以正常工作。但是,应该检查re.search 的结果是否不是None。否则,如果在访问.group() 后字符串中没有数字,它将抛出 AttributeError ('NoneType' object has no attribute 'group')。【参考方案7】:

来自ChristopheD 的答案:https://***.com/a/2500023/1225603

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

【讨论】:

【参考方案8】:
>>> import itertools
>>> int(''.join(itertools.takewhile(lambda s: s.isdigit(), string1)))

【讨论】:

这仅在数字位于字符串开头时才有效。另外,为什么不使用 str.isdigit 而不是 lambda? 这也可以写成int(''.join(itertools.takewhile(str.isdigit, string1)))。我永远不会真正使用任何一种方法,因为这太复杂了。 groups.google.com/forum/?hl=en&fromgroups#!msg/… 我正在为字符串长度为数千个字符的情况提前计划。【参考方案9】:

迭代器版本

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

【讨论】:

以上是关于如何从 Python 中的字符串中获取整数值?的主要内容,如果未能解决你的问题,请参考以下文章

从字符串中获取唯一的整数值

如何从 NSRange 中提取整数值?

如何使用 Q 对象在 django 模型中查询浮点/整数值或字符串?

如何在使用 python 从 mysql 数据库中获取数据时提取整数值

如何从 Rails 中的枚举中获取整数值?

如何在一个已经在python中保存整数值的索引处将字符分配给字符串?