Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2023, 15:02   #1
Ezio50
 
Регистрация: 21.04.2023
Сообщений: 6
По умолчанию Преобразование из LaTeX(Python)

При наборе текста лекций Костя часто использует формулы vi, которые записываются в разметке LaTeX как «$v_i$». Давайте обработаем его текст, чтобы индексы превратились в более каноничные обозначения для обращения к индексам v[i].
Вместо i может стоять выражение, которое тогда группируется как «$v_{ij}$». индексы могут являться комбинацией букв или цифр. Если индекс из >1 символа не обернут в скобки, замену делать не надо, потому что иначе может просочиться ошибка. Мы считаем, что получить «$v_ij$» после прогона вашей программы лучше, чем получить «v[ij]» или «v[i]j» ввиду неоднозначности трактовки.
В индексе может лежать любая комбинация букв и цифр, а вот название массива зафиксировано как «v» и не меняется.
Формат входных данных
Любой текст, состоящий из любого количества непустых строк. Все строки, включая последнюю, завершаются символом перевода строки. Все символы входного файла (кроме переводов строки) имеют ASCII-коды в диапазоне от 32 до 127.
Гарантируется, что все фигурные скобки имеют пару.
Формат результата
Текст, состоящий из того же количества строк, но с выполненной заменой.

Примеры
Входные данные
Vertex $v_1$ is isolated ---
it's of degree 0.
Vertice $v_2$, $v_{7}$
and $v_{12}$ are terminal ---
each of them is of degree 1.
Note that $v_1u$ actually means
not $v_{1u}$ but ${v_1}u$,
so $v_1u$ should NOT be changed
to v[1u].
Результат работы
Vertex v[1] is isolated ---
it's of degree 0.
Vertice v[2], v[7]
and v[12] are terminal ---
each of them is of degree 1.
Note that $v_1u$ actually means
not v[1u] but ${v_1}u$,
so $v_1u$ should NOT be changed
to v[1u].
Примечания
Заготовка для решения на Python:
Код:
import re
import sys
REGEX_MASK = r''
REGEX_SUB = r''
for line in sys.stdin:
    res = re.sub(REGEX_MASK, REGEX_SUB,line)
    print(res,end='')
Очень дурацкое задание, мой код заменяет то, что не надо заменять(основная проблема)
Код:
import re
import sys

REGEX_MASK = r'\$v_([a-zA-Z0-9]+)\$|\$v_\{([a-zA-Z0-9]+)\}\$|\$v_([a-zA-Z0-9]{2,})\b'
REGEX_SUB = r'v[\g<1>\g<2>\g<3>]'

for line in sys.stdin:
    res = re.sub(REGEX_MASK, REGEX_SUB, line)
    print(res, end='')
Ezio50 вне форума Ответить с цитированием
Старый 21.04.2023, 17:26   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,292
По умолчанию

Код:
import re
import sys
REGEX_MASK = r'\$v_(([a-zA-Z0-9])|{([a-zA-Z0-9]+)})\$'
REGEX_SUB = r'v[\2\3]'
for line in sys.stdin:
    res = re.sub(REGEX_MASK, REGEX_SUB, line)
    print(res, end = '')
Вот так на приведённом примере отрабатывает.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[решено] Преобразование строки из переменной в дату через datetime.strptime - Python lazgo Python 3 28.06.2018 14:47
Вейвлет преобразование. Матрица [Python] KrockodilL Помощь студентам 0 25.05.2017 19:28
Latex Krasi Свободное общение 0 26.03.2010 18:35