我需要将一些文本转换为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
...但是如何获得它们之间的“ \”?
答案 0 :(得分: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
在这里,re.sub(rx, lambda x: r' ${} $'.format(r" \ ".join(x.group(1).split())), text)
是对re.sub
的调用,其中第二个参数是lambda表达式。匹配项以x
的形式传递到此处,x.group(1)
是字符串替换模式中\1
向后引用的“等效”。它用空格分割,然后用空格+反斜杠+空格连接在一起,并且两端的空格+美元序列一起插入到结果字符串中,而不是匹配值。