有没有一种方法可以从文本文件中带括号的数字中提取值?

时间:2019-03-25 19:43:28

标签: python split

我有一个非常基本的问题,但是我在互联网上找不到任何“美丽”的解决方案。我只想从有字符串和括号的行中提取数字。
例如,我有一个输出文本文件,如下所示:

test: [1, 50, 200] 

我想提取值1、50和200,以使这些数字成为一个numpy数组。

已经通过拆分和剥离解决了该问题,但我认为此解决方案不是很优雅。

3 个答案:

答案 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是危险的。