Dmitrys
Авг. 26, 2011 22:36:38
Добрый день!
Есть задача - извлечь при помощи регулярного выражения некоторые строки, и заменить их на значения из словаря (строка это ключ в словаре). Подскажите пожалуйста, как будет правильнее это сделать?
Я вижу два варианта:
1. использовать в re.sub() собственную функцию для замены значения, которая будет просто возвращать нужно значение из словаря
2. использовать re.findall(), найти все строки и потом уже при помощи replace() заменять значения в цикле
Сейчас использую первый вариант и вроде бы все устраивает, просто интересно правильная эта реализация или можно как-нибудь по-элегантнее это сделать?
Спасибо!
Yurietc
Авг. 27, 2011 00:20:40
Чтобы можно было сказать что-то конкретное нужно выложить уже написанный код, тем более если он рабочий. А так не ясно, возможно регекспы в данной задаче и не нужны вовсе.
Как говорил кто-то из участников форума: “мой хрустальный шар сегодня сломался …”
:)
o7412369815963
Авг. 27, 2011 17:17:53
Dmitrys
Авг. 27, 2011 18:58:07
Yurietc
Чтобы можно было сказать что-то конкретное нужно выложить уже написанный код, тем более если он рабочий.
Вот такой код:
import re
def replace_func(match_obj):
if match_obj.group(1) in variables:
return str(variables[match_obj.group(1)])
variables = {"variable": 256}
text = 'bla bla blahhh $variable blahhh blaaahhhhh'
result = re.sub(r'\$([\w_-]+)', replace_func, text)
Вместо одной строчки переменной text будет относительно небольшой кусок текста (15-20 kb).
Isem
Авг. 27, 2011 19:07:25
Код не нужен, конечно. Тем более вы все четко и ясно написали. Как вы сделали - так и надо. Если нужен анализ, то тогда конечно нужен findall.
dimabest
Авг. 27, 2011 20:21:30
шаблонизатор пишешь? :)
Dmitrys
Авг. 28, 2011 23:42:30
Всем спасибо за ответы!
dimabest
шаблонизатор пишешь?
Да, только очень упрощенное - я новичок в питоне, как раз поможет лучше разобраться)