Есть ли способ извлечь значение из чисел в скобках в текстовом файле? - PullRequest
3 голосов
/ 25 марта 2019

У меня очень простой вопрос, но я не нашел "красивого" решения в интернете.Все, что я хочу, это извлечь число из строки, где есть строка и скобка.
Например, у меня есть выходной текстовый файл следующим образом:

test: [1, 50, 200] 

Я хочу извлечь значения 1, 50и 200 для того, чтобы создать массив из этих чисел.

Проблема уже была решена с помощью разбивки на части, но я не считаю это решение очень элегантным.

Ответы [ 3 ]

2 голосов
/ 25 марта 2019

Вы можете использовать очень наивное регулярное выражение:

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]
0 голосов
/ 25 марта 2019

Я, вероятно, на самом деле использовал бы что-то, включающее разбиение или регулярное выражение, для некоторой проверки ошибок и безопасности - чтобы убедиться, что во входных данных не скрыто ничего вредоносного. Но вы могли бы сделать что-то вроде этого.

Я предполагаю, что у вас есть строка текста в строковой переменной line. Тогда вы можете сделать

from ast import literal_eval
line = "test: [1, 50, 200]"    # or whatever your line is
array = literal_eval(line.partition(":")[2].strip())

Но будьте осторожны, потому что запуск eval на неопределенном вводе опасен.

0 голосов
/ 25 марта 2019

ast.literal_eval дает одно решение:

import ast
s = 'test: [1, 50, 200]'
ast.literal_eval(s.split(':')[1].strip())

#evaluates to [1, 50, 200]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...