Форум сайта python.su
hi!
Задача - преобразование текстовой разметки в ansi коды. Но поскольку разметка — вариация markdown без открывающего и закрывающего тэгов, как в bbcodes, то столкнулся с трудностью преобразования закрывающего тэга. И с тем, чтобы не изобретать велосипед и не плодить говнокод, решил, что лучше спросить тут как это лучше сделать.
файл данных markdown.txt
*Курсив* и _Курсив_ **Жирное начертание** и __Жирное начертание__ ~~Зачеркнутый текст~~
magenta = "\033[1;35m" defcolr = "\033[0m" # Открытие файла, печать содержимого на экран, и закрытие файла with open('markdown.txt') as my_file: file = my_file.read().replace('**', magenta) print(file)
Офлайн
Начать надо с исчерпывающего описания задачи. То что у вас недостаточно.
как вы предполагаете преобразовывать примеры снизу? Валиден любой входной поток или возможны синтаксические ошибки? Как вы планируете добиваться вывода двойных звездочек?
"aaa**bbb" " aaa**bbb__ccc**ddd" "aaa ** bbb** ccc"
Офлайн
Тут любая ошибка приводит к простой печати ошибочного символа как части текста. То есть 2*2=4 так и напечатает, а 2*2=**4** выделит 4. Обрабатываются только парные тэги. Это меня и беспокоит, как после обнаружения первого * искать закрывающий. Пахнет несколькими вложенными циклами for…
C “import re” знаком, можно и их использовать.
А так читайте книги, например теория синтаксического анализа перевода и компиляции. Теорию конечных автоматов.
Офлайн
SchlangeДа это есть на русском. И это первая ссылка гугла.
Про это не слышал, что-то есть на русском?
Schlange??? Речь о том что ваше описание задачи даже близко не стоит с полной постановкой задачи. Указанная литература позволяет вам понять что нужно чтобы именно полностью и корректно поставить задачу преобразования текста.
Тут любая ошибка приводит к простой печати ошибочного символа как части текста.
Schlange
C “import re” знаком, можно и их использовать.
import re examp=""" aaa**b_bb____ccc**ddd**ff__ 2*2=**4** """ tmp= examp.replace("**","__") res = re.sub("__(.*?)__",r"<b>\1</b>",tmp) print(res) aaa<b>b_bb</b><b>ccc</b>ddd<b>ff</b> 2*2=<b>4</b>
Офлайн
Спасибо парни за ценные советы, давноискал эту информацию!
Офлайн