我有一个非常基本的问题,但是我在互联网上找不到任何“美丽”的解决方案。我只想从有字符串和括号的行中提取数字。
例如,我有一个输出文本文件,如下所示:
test: [1, 50, 200]
我想提取值1、50和200,以使这些数字成为一个numpy数组。
已经通过拆分和剥离解决了该问题,但我认为此解决方案不是很优雅。
答案 0 :(得分:2)
您可以使用非常幼稚的正则表达式:
import numpy as np
import re
nums = map(int, re.findall(r'\d+', 'test: [1, 50, 200]'))
print(np.array([n for n in nums]))
# [ 1 50 200]
另一种选择是使用正则表达式提取整个列表,然后使用literal_eval
:
import numpy as np
import re
from ast import literal_eval
li = re.search(r'(\[.*\])', 'test: [1, 50, 200]').group()
print(np.array(literal_eval(li)))
# [ 1 50 200]
答案 1 :(得分:0)
ast.literal_eval
提供了一种解决方案:
import ast
s = 'test: [1, 50, 200]'
ast.literal_eval(s.split(':')[1].strip())
#evaluates to [1, 50, 200]
答案 2 :(得分:0)
我实际上可能会使用涉及splits或regex的东西来进行一些错误检查和安全性---以确保输入中没有任何恶意隐藏。但是你可以做这样的事情。
我将假设您的文本行包含在字符串变量line
中。那你可以做
from ast import literal_eval
line = "test: [1, 50, 200]" # or whatever your line is
array = literal_eval(line.partition(":")[2].strip())
但是要小心,因为在不确定的输入上运行eval
是危险的。