Python Regex: весь текст в совпадении инкапсулирован в фигурные скобки, иначе произойдет сбойPython

Программы на Python
Ответить
Anonymous
 Python Regex: весь текст в совпадении инкапсулирован в фигурные скобки, иначе произойдет сбой

Сообщение Anonymous »

Я работаю над другим импортером текста, используя Python для Ren'Py (игровой движок на основе Python). Хотя я разработал свою программу для добавления текстовых тегов Ren'Py к тексту, она не может определить, добавлен ли лишний текстовый тег. Например, в Ren'Py текст выделяется жирным шрифтом, заключая его в тег «жирный», например «{b}Я выделен жирным шрифтом!{/b} Я — нет!».
В то время как мой программа добавляет эти теги, выделенные жирным шрифтом, когда это необходимо, она может создавать выходные данные типа "{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'\})')
Но это желаемое поведение продолжает ускользать от меня по причинам, которые я могу объяснить только отсутствием знаний о регулярных выражениях. Я просмотрел regex101 и документацию библиотеки Python re в поисках ответов, но не нашел ни одного. Я надеюсь, что эти характеристики имеют смысл. Кто-нибудь знает, как я могу этого добиться?

Подробнее здесь: https://stackoverflow.com/questions/792 ... -else-fail
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»