假设我有一个字符串
string1 = "498results should get"
现在我只需要从498
这样的字符串中获取整数值。在这里,我不想使用list slicing
,因为整数值可能会像这些示例一样增加:
string2 = "49867results should get"
string3 = "497543results should get"
所以我想从字符串中仅以相同的顺序获取整数值。我的意思分别来自498,49867,497543
的{{1}}。
任何人都可以通过一两行告诉我如何做到这一点吗?
答案 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]