如何从 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,string3
的498,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 中的字符串中获取整数值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Q 对象在 django 模型中查询浮点/整数值或字符串?