【发布时间】:2018-07-21 01:36:08
【问题描述】:
我有一行从文本文件中读取,如下所示:
line="('18-1', '29-1', '30-1', '42-1', '44-1')"
我想把它转换成这样的一组字符串:
expected=['18-1', '29-1', '30-1', '42-1', '44-1']
有什么想法吗?我尝试 re.sub() 至少摆脱括号,但无济于事。
【问题讨论】:
标签: python string reformatting
我有一行从文本文件中读取,如下所示:
line="('18-1', '29-1', '30-1', '42-1', '44-1')"
我想把它转换成这样的一组字符串:
expected=['18-1', '29-1', '30-1', '42-1', '44-1']
有什么想法吗?我尝试 re.sub() 至少摆脱括号,但无济于事。
【问题讨论】:
标签: python string reformatting
你可以使用ast.literal_eval:
import ast
line="('18-1', '29-1', '30-1', '42-1', '44-1')"
new_line = list(ast.literal_eval(line))
输出:
['18-1', '29-1', '30-1', '42-1', '44-1']
或者,使用re.findall:
import re
vals = re.findall('\d+\-\d+', line)
输出:
['18-1', '29-1', '30-1', '42-1', '44-1']
【讨论】:
你可以使用eval 方法来实现require。如下:
line = "('18-1', '29-1', '30-1', '42-1', '44-1')"
result = list(eval(line))
expected = ['18-1', '29-1', '30-1', '42-1', '44-1']
assert expected == result
【讨论】:
ast.literal_eval 足以完成此任务。没有必要使用危险的eval 函数。
ast.literal_eval 更安全。我同意你的看法。