Вставка строк в определенных местах в тексте - PullRequest
2 голосов
/ 30 марта 2019

Мне нужно преобразовать текст в латексный формат.

123 {\i1}e11 e22{\i0} asa ds dawdas a as<asd a<asd <ads sasdasdasd

Моя цель - поместить все, что находится между {\ i1} и {\ i0} в $ и $, вместо этого и добавить "\ "между каждым словом.

Ожидаемый результат:

123 $e11 \ e22 $ asa ds dawdas a as<asd a<asd <ads sasdasdasd

или (это тоже нормально)

123 $e11 \ e22 \ $ asa ds dawdas a as<asd a<asd <ads sasdasdasd

Что я пробовал:

text = '123 {\i1}e11 e22{\i0} asa ds dawdas a as<asd a<asd <ads sasdasdasd'
a = re.sub(r'{\\i1}(.*?){\\i0}', r' $\1$', text)

123 $ e11 e22 $ asa ds dawdas a as

... но как мне получить эти "\" промежуточные значения?

1 Ответ

1 голос
/ 30 марта 2019

Вы можете использовать

import re
text = '123 {\i1}e11 e22{\i0} asa ds dawdas a as<asd a<asd <ads sasdasdasd'
rx = r'{\\i1}(.*?){\\i0}'
a = re.sub(rx, lambda x: r' ${} $'.format(r" \ ".join(x.group(1).split())), text)
print(a) # => 123  $e11 \ e22 $ asa ds dawdas a as<asd a<asd <ads sasdasdasd

См. Демо Python онлайн .

Здесь re.sub(rx, lambda x: r' ${} $'.format(r" \ ".join(x.group(1).split())), text) - это вызов re.sub, где вторым аргументом является лямбда-выражение. Совпадение передается там, как x, x.group(1) является «эквивалентом» обратной ссылки \1 в шаблоне замены строки. Он разделяется пробелами и соединяется с пробелом + обратная косая черта + пробел и вместе с последовательностями пробел + доллар на обоих концах вставляется в результирующую строку вместо значения совпадения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...