在文本中的特定位置插入字符串

时间:2019-03-29 21:37:52

标签: python regex 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 个答案:

答案 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

请参见Python demo online

在这里,re.sub(rx, lambda x: r' ${} $'.format(r" \ ".join(x.group(1).split())), text)是对re.sub的调用,其中第二个参数是lambda表达式。匹配项以x的形式传递到此处,x.group(1)是字符串替换模式中\1向后引用的“等效”。它用空格分割,然后用空格+反斜杠+空格连接在一起,并且两端的空格+美元序列一起插入到结果字符串中,而不是匹配值。