Друзья: в PostgreSQL plpython я пытаюсь выполнить итеративный поиск / замену в текстовом блоке 'data'.
Использование re-sub для определения шаблона совпадения, а затем вызов функции 'replace' для выполнения работы.
Цель состоит в том, чтобы функция 'replace' вызывалась повторно, так как некоторые замены генерируют дальнейшие совпадения 'правила', которые требуют дополнительных замен.
Все работает хорошо благодаря множеству замен - и мне удается запустить 2-й проход цикла повторения. Затем, пока что-то не заставит шаблон Regex возвращать целое число (?) - очевидно, в тот момент, когда он не найдет совпадений ... ?? Я попытался проверить на «Нет» и «0», но не повезло. Идеи?
data = (a_huge_block of_text)
# ====================== THE FUNCTION ==============
def replace(matchobj):
tag = matchobj.group(1)
plpy.info("-------- matchobj.group(1), tag: ", tag)
if matchobj.group(1) != '':
(do all the replacement work in here)
# ====================== END FUNCTION ==============
passnumber = 0
# If _any_ pattern match is found, process all of data for _all_ matches:
while re.search('(rule:[A-Za-z#]+)', data) != '':
# BEGIN repeat loop:
passnumber = passnumber + 1
plpy.info(' ================================ BEGIN PASS: ', passnumber)
data = re.sub('(rule:[A-Za-z#]+)', replace, data)
plpy.info(' =================================== END PASS: ', passnumber)
Над кодом кажется, что работает нормально, во второй итерации ... затем:
ERROR: TypeError: sequence item 21: expected string, int found
CONTEXT: Traceback (most recent call last):
PL/Python function "myfunction", line 201, in <module>
data = re.sub('(rule:[A-Za-z#]+)', replace, data)
PL/Python function "myfunction", line 150, in sub
PL/Python function "myfunction"
Также пытались re.search (...)! = '' - и re.search (...)! = 'None' --- с тем же результатом.
Я понимаю, что должен найти синтаксис для представления объекта сопоставления в некоторой читаемой форме ...