无法从字符串中提取要列出的元素

时间:2015-12-01 09:47:03

标签: python string

我正在使用python并面临问题从字符串中提取特定元素,该字符串包含由数字组成的元组。这里要注意的一件事是字符串中的数字元组不是固定的,它可以更多或更少。字符串的格式与下面提到的相同:

'string = [(100, 1), (2500, 2), (5000, 3), (10000, 3).....]'

期望的输出:

[100,2500,5000,10000.....]

我尝试了什么:

到目前为止,我尝试拆分上面的字符串以获得以下输出

['string', '=', '(100', '1)', '(2500', '2)', '(5000', '3)', '(10000, '3)']

之后我计划删除像(,'这样的不需要的字符来获取我想要的数字,但是这个方法必须对每个元组进行硬编码,并且字符串中的元组长度不固定。

4 个答案:

答案 0 :(得分:3)

您可以使用ast.literaleval()拆分文字以查找元组列表,然后使用>>> next(zip(*literal_eval(s.split('=')[-1].strip()))) (100, 2500, 5000, 10000) 评估您的列表:

zip

请注意,因为在python 2.X zip(*literal_eval(s.split('=')[-1].strip()))[0] (100, 2500, 5000, 10000) 中返回一个列表,你可以使用索引来获取第一个项目:

builder.setCustomTitle(tv2);

答案 1 :(得分:2)

使用re.findall

>>> s = 'string = [(100, 1), (2500, 2), (5000, 3), (10000, 3).....]'
>>> print [int(i) for i in re.findall(r'\((\d+)', s)]
[100, 2500, 5000, 10000]

答案 2 :(得分:1)

您可以ast.literal_eval

>>> import ast
>>> my_str = 'string = [(100, 1), (2500, 2), (5000, 3), (10000, 3)]'
>>> [x[0] for x in ast.literal_eval(my_str.split("=")[-1].strip())]
[100, 2500, 5000, 10000]

答案 3 :(得分:0)

>>> s = 'string = [(100, 1), (2500, 2), (5000, 3), (10000, 3)]'
>>> l = [i[0] for i in eval(s.split("=")[1])]
>>> l
[100, 2500, 5000, 10000]