В то время как мой программа добавляет эти теги, выделенные жирным шрифтом, когда это необходимо, она может создавать выходные данные типа "{b}Я выделен жирным шрифтом!{/b}{b} Я тоже!{/b}", что является переполненным эквивалентом "{ b}Я выделен жирным шрифтом! тоже!{/b}". Хотя это всего лишь один тег, если у вас есть несколько тегов одновременно, он может переполнять текст, когда в этом нет необходимости.
Поэтому я работал над шаблоном регулярного выражения, который исправления, если есть экземпляр избыточной маркировки. Например, строка Python r'{b}Я выделена жирным шрифтом!{/b}{b} Я тоже!{/b}' станет r'{b}Я выделена жирным шрифтом! Я тоже!{/b}', тогда как строка r'{b}Я выделена жирным шрифтом!{/b} Нет!{b} Я тоже!{/b}' будет остаются неизменными. Это регулярное выражение будет перегенерировано по тегу с помощью re.compile(r'(\{\/'+tag+r'\}(# желаемый шаблон регулярного выражения)\{'+tag+r'\})' ) где tag — это строковый параметр, передаваемый вызову метода.
Для более сложного примера: string r'{s}{b}{color= #fff}первый кусок! {/color}{/b}{/s}{u}{i}{b}{size=+2.0}второй фрагмент! {space=20}{/size}{/b}{/i}{/u}{s}{i}{size=-2.0}{color=#eee}последний фрагмент!{/color}{/size} {/i}{/s}' станет r'{s}{b}{color=#fff}первым куском! {/color}{/s}{u}{i}{size=+2.0}второй кусок! {space=20}{/size}{/b}{/u}{s}{size=-2.0}{color=#eee}последний фрагмент!{/color}{/size}{/i}{/s }'
Я просмотрел несколько шаблонов, чтобы попытаться разобраться в этом, но чувствую, что мне не хватает некоторой мудрости регулярных выражений, чтобы решить эту проблему. Я пробовал такие шаблоны:
Код: Выделить всё
tag = 'b' # or any other Ren'Py text tag
attempt1 = re.compile(r'(\{\/'+tag+r'\}(\s*\{.+?\}\s*)\{'+tag+r'\})')
attempt2 = re.compile(r'(\{\/'+tag+r'\}(.+?\}\s*\{.+?)\{'+tag+r'\})')
attempt3 = re.compile(r'(\{\/'+tag+r'\}(\s*\{.+?\}\s*{.+?\}\s*)\{'+tag+r'\})')
Подробнее здесь: https://stackoverflow.com/questions/792 ... -else-fail
Мобильная версия