Подмена текста (функций) на регексах
2010-01-30
python
regexp
Задача
Нужно подменить функцию в тексте и проставить идентификаторы.
Данный код подменяет "Сообщить(" на "глСообщить('123'," и подставляет первым параметром идентификатор.
Код
# coding: utf-8
import re
text = """
// 1С код
Процедура ВыводДанных()
Сообщить("Привет");
ТутВсякиеФункции(); Сообщить("Ошибка!","!");
глСообщить("123","Проверка","!");
КонецПроцедуры"""
id = 0
def repl(m):
global id
id += 1
return '%sглСообщить("x%d",' % (m.groups(0)[0],id)
print re.sub(r'(\s+?)Сообщить\(', repl, text)
Результат
// 1С код
Процедура ВыводДанных()
глСообщить("x1","Привет");
ТутВсякиеФункции(); глСообщить("x2","Ошибка!","!");
глСообщить("123","Проверка","!");
КонецПроцедуры
таким способом я подменил все ф-ии вывода сообщений на глобальную в торговле 1С 7.7 (разбирал и собирал с пом gcomp), теперь когда пользователь звонит и говорит код, я за считанные секунды перехожу на то место которое вызвало вопрос.