2015-10-31 4 views
4

Я ищу помощь по проблеме, которая заставила меня остановиться. У меня есть несколько строк, которые выглядят, как этоСравните и замените элементы в строке

line = '{2}*{3}^2' 

Числа в фигурных скобках есть отображение в словаре, где словарь будет выглядеть примерно так

factorseq_dict = [('2', 'NAME1'), ('3', 'NAME2')] 

Что я ищу является скрипт, который будет считывать каждый ключ (цифры в скобке) в строке и искать соответствующее значение в словаре. Это значение будет использовано для создания нового mylist, сохраняя при этом все остальное в исходной константе строки. Поэтому мой новый контент изменит строку на новую строку следующим образом.

line = '{2}*{3}^2' 
newline = '{NAME1}*{NAME2}^2' 

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

Ближайший я получил, чтобы получить мои детали, но после того, что я озадачен

line='{2}*{3}^2' 
elements = re.split('({[^}]*})', line) 

Благодарности

ответ

3

Вы можете передать анонимную функцию внутри замены части re.sub функции.

>>> import re 
>>> line = '{2}*{3}^2' 
>>> factorseq_dict = [('2', 'NAME1'), ('3', 'NAME2')] 
>>> dict_ = dict(factorseq_dict) 
>>> re.sub(r'\{(\d+)\}', lambda m: '{' + dict_[m.group(1)] + '}', line) 
'{NAME1}*{NAME2}^2' 

Немного объяснение функции re.sub в этом к регистру

dict_ = {'3': 'NAME2', '2': 'NAME1'} 

шаблон г '{(\ D +)}' будет извлекать '2' или '3' и проход для лямбда и этот объект совпадения будет действовать как клавиша словаря для возврата значения из словаря dict_ eg dict _ ['2'] возвращает 'NAME1' (добавленные фигурные скобки возвращают {NAME1} и т. д.), которые будут использоваться в строке для замены {2} или {3}. В конце концов мы получаем '{NAME1} * {NAME2}^2'

+1

Спасибо, Avinash. Работает. –

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