【问题标题】:Python: Replacing "\" with "\\" [duplicate]Python:用“\\”替换“\”[重复]
【发布时间】:2020-12-07 14:40:31
【问题描述】:

我想将“\”替换为“\\”以便进一步编辑和导出到 LaTeX。 (这是一个矩阵计算器,应该将计算的所有步骤导出到 LaTeX)

import re

text='''
\begin{alignat*}{2}
\begin{sysmatrix}{rrr|r}
 1 &  2 & 0 & 0 \\
-1 &  1 & 2 & 0 \\
 1 &  0 & 1 & 5 \\
 0 & -2 & 1 & 4
\end{sysmatrix}'''

我试过replace()re.sub()。我找到的答案建议了这两个,但我猜他们在这种情况下不起作用。

print(re.sub('\\\\',' \\\\\\\\', text))
print(text.replace('\\',' \\\\'))
print(text.replace('\\',r' \\\\'))

输出

egin{alignat*}{2}
egin{sysmatrix}{rrr|r}
 1 &  2 & 0 & 0  \\
-1 &  1 & 2 & 0  \\
 1 &  0 & 1 & 5  \\
 0 & -2 & 1 & 4
 \\end{sysmatrix}

egin{alignat*}{2}
egin{sysmatrix}{rrr|r}
 1 &  2 & 0 & 0  \\
-1 &  1 & 2 & 0  \\
 1 &  0 & 1 & 5  \\
 0 & -2 & 1 & 4
 \\end{sysmatrix}


egin{alignat*}{2}
egin{sysmatrix}{rrr|r}
 1 &  2 & 0 & 0  \\\\
-1 &  1 & 2 & 0  \\\\
 1 &  0 & 1 & 5  \\\\
 0 & -2 & 1 & 4
 \\\\end{sysmatrix}

应该是这样的:

\begin{alignat*}{2}
\begin{sysmatrix}{rrr|r}
 1 &  2 & 0 & 0 \\
-1 &  1 & 2 & 0 \\
 1 &  0 & 1 & 5 \\
 0 & -2 & 1 & 4
\end{sysmatrix}'

或者这个:

\\begin{alignat*}{2}
\\begin{sysmatrix}{rrr|r}
 1 &  2 & 0 & 0 \\\\
-1 &  1 & 2 & 0 \\\\
 1 &  0 & 1 & 5 \\\\
 0 & -2 & 1 & 4
\\end{sysmatrix}'

还有其他想法如何使用 python 编写 LaTeX 文档吗?

【问题讨论】:

  • 为什么你需要正则表达式替换一些东西?您可以简单地首先正确生成字符串吗?或者是否有某种理由认为这不是一个选择?如果是这样,请将信息/代码添加到您的问题中,说明您的 text 字符串来自何处。否则,请参阅下面的答案。

标签: python regex latex backslash


【解决方案1】:

好吧,您的替换确实有效(它正确地将 \ 替换为 \\),但您的初始字符串定义存在问题:当您定义 text 时,它实际上并没有以反斜杠开头,并且单词begin,而是使用字符\b,这是一个ASCII退格(cmp:what does backward-slash b do in Python?),后跟egin

如果您使用print(repr(text)) 打印字符串的非解释表示,您可以看到这一点:

'\n\x08egin{alignat*}{2}\n\x08egin{sysmatrix}{rrr|r}\n 1 &  2 & 0 & 0 \\\n-1 &  1 & 2 & 0 \\\n 1 &  0 & 1 & 5 \\\n 0 & -2 & 1 & 4\n\\end{sysmatrix}'

如果你一开始就正确定义了你的字符串

text='''
\\begin{alignat*}{2}
\\begin{sysmatrix}{rrr|r}
 1 &  2 & 0 & 0 \\\\
-1 &  1 & 2 & 0 \\\\
 1 &  0 & 1 & 5 \\\\
 0 & -2 & 1 & 4
\\end{sysmatrix}'''

一切都应该没问题。一个简单的print(text) 产生

\begin{alignat*}{2}
\begin{sysmatrix}{rrr|r}
 1 &  2 & 0 & 0 \\
-1 &  1 & 2 & 0 \\
 1 &  0 & 1 & 5 \\
 0 & -2 & 1 & 4
\end{sysmatrix}

虽然这也使得对正则表达式替换的整个需求已经过时,但您的问题中可能缺少约束。

【讨论】:

  • 非常感谢,您的解决方案非常适合我的目的......我仍然想知道我可以以某种方式替换反斜杠。在建议的线程中找到了一个答案:stackoverflow.com/questions/17327202/…
猜你喜欢
  • 2019-08-11
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
相关资源
最近更新 更多