#python #regex #python-3.x
#python #регулярное выражение #python-3.x
Вопрос:
Мне нужно преобразовать некоторый текст в формат Latex.
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:
Вы можете использовать
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
обратной ссылки в шаблоне замены строки. Он разделен пробелами и соединен обратно пробелом обратная косая черта пробел и вместе с последовательностями пробел доллар на обоих концах вставляется в результирующую строку вместо значения соответствия.