我正在使用python并面临问题从字符串中提取特定元素,该字符串包含由数字组成的元组。这里要注意的一件事是字符串中的数字元组不是固定的,它可以更多或更少。字符串的格式与下面提到的相同:
'string = [(100, 1), (2500, 2), (5000, 3), (10000, 3).....]'
期望的输出:
[100,2500,5000,10000.....]
我尝试了什么:
到目前为止,我尝试拆分上面的字符串以获得以下输出
['string', '=', '(100', '1)', '(2500', '2)', '(5000', '3)', '(10000, '3)']
之后我计划删除像(,'
这样的不需要的字符来获取我想要的数字,但是这个方法必须对每个元组进行硬编码,并且字符串中的元组长度不固定。
答案 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]