Home

Tags

Подмена текста (функций) на регексах

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), теперь когда пользователь звонит и говорит код, я за считанные секунды перехожу на то место которое вызвало вопрос.