2017-02-05 2 views

ответ

4

Doing его ast модуль будет лучше, как jezrael сделал это. Вот еще одно решение с регулярным выражением:

import re 

st = "'a': '1', 'b': '2.3', 'c': 'name', 'd': 229, 'e': '', 'f': '228', 'g': 12" 
print re.findall(r'\'\S+?\':\s*\'?(.*?)\'?(?:,|$)', st) 

Выход:

['1', '2.3', 'name', '229', '', '228', '12'] 

Демо на regex101:

https://regex101.com/r/zGAt4D/5

+0

Что есть число, а не строка после ':'? – Mansumen

+0

@Mansumen Хорошо, я улучшу его – MYGz

+0

@Mansumen Отметьте сейчас. – MYGz

5

Вы можете сначала создать dict по ast.literal_eval, а затем получить values:

import ast 

st = "'aaa': '1', 'bbb': '2.3', 'ccc': 'name'" 

print (ast.literal_eval('{' + st + '}')) 
{'aaa': '1', 'bbb': '2.3', 'ccc': 'name'} 

#python 3 add list 
print (list(ast.literal_eval('{' + st + '}').values())) 
['1', '2.3', 'name'] 

#python 2 
print ast.literal_eval('{' + st + '}').values() 
['1', '2.3', 'name'] 
+0

Спасибо. Но есть ли другой способ сделать это с регулярным выражением? – Mansumen

+0

проверить другое решение. – jezrael

Смежные вопросы