如何通过用户输入转义收到的乳胶代码?

Vij*_*thy 39 python string text

我从用户输入的GUI文本框中读取一个字符串,并通过pandoc处理它.该字符串包含带有反斜杠字符的math的latex指令.我想将字符串作为原始字符串发送到pandoc进行处理.但是像"\ theta"这样的东西变成了一个标签和"heta".

如何将包含反斜杠字符的字符串文字转换为原始字符串...?

编辑:

谢谢develerx,飞羊和unutbu.但是这些解决方案似乎都没有帮助我.原因是还有其他的backslashed-characters在python中没有任何影响但在latex中有意义.

例如'\ lambda'.建议生产所有方法

\\lambda
Run Code Online (Sandbox Code Playgroud)

在乳胶加工中没有经过 - 它应该保持为\ lambda.

另一个编辑:

如果我能得到这项工作,我想我应该通过.@Mark:这三种方法都给出了我不想要的答案.

a='\nu + \lambda + \theta'; 
b=a.replace(r"\\",r"\\\\"); 
c='%r' %a; 
d=a.encode('string_escape');
print a

u + \lambda +   heta
print b

u + \lambda +   heta
print c
'\nu + \\lambda + \theta'
print d
\nu + \\lambda + \theta
Run Code Online (Sandbox Code Playgroud)

fly*_*eep 41

Python的原始字符串只是一种告诉Python解释器它应该将反斜杠解释为文字斜杠的方法.如果您阅读了用户输入的字符串,那么它们已经超出了原始状态.此外,用户输入最有可能按字面读取,即"原始".

这意味着口译发生在其他地方.但是,如果你知道它发生了,为什么不逃避反斜杠的任何解释呢?

s = s.replace("\\", "\\\\")
Run Code Online (Sandbox Code Playgroud)

(请注意,你不能做r"\""原始字符串不能在单个反斜线结束",但我可以使用r"\\"以及作为第二个参数.)

如果这不起作用,您的用户输入是出于解释反斜杠的一些神秘原因,因此您需要一种方法来告诉它停止它.

  • 这是我第一次看到"原始字符串不能以单个反斜杠结尾".我没有意识到Python字符串解析是如此hacky - 我认为`r`前缀意味着停止将反斜杠视为特殊,而是意味着输出两个字符而不是解释它们. (2认同)

小智 15

如果要将现有字符串转换为原始字符串,那么我们可以像下面那样重新分配

s1 = "welcome\tto\tPython"
raw_s1 = "%r"%s1
print(raw_s1)
Run Code Online (Sandbox Code Playgroud)

会打印

welcome\tto\tPython
Run Code Online (Sandbox Code Playgroud)

  • 这只是伪装的'repr`.它并没有真正正确地回答这个问题. (4认同)
  • 我相信,至少在Python3中,这实际上会打印出来:'welcome \\ tto \\ tPython' - 包括单引号. (2认同)

unu*_*tbu 5

a='\nu + \lambda + \theta'
d=a.encode('string_escape').replace('\\\\','\\')
print(d)
# \nu + \lambda + \theta
Run Code Online (Sandbox Code Playgroud)

这表明,有之前的一个反斜杠nl并且t

print(list(d))
# ['\\', 'n', 'u', ' ', '+', ' ', '\\', 'l', 'a', 'm', 'b', 'd', 'a', ' ', '+', ' ', '\\', 't', 'h', 'e', 't', 'a']
Run Code Online (Sandbox Code Playgroud)

GUI发生了一些时髦的事情。这是一个通过抓取一些用户输入的简单示例Tkinter.Entry。注意,文本唯一检索面前的一个反斜杠nlt。因此,不需要额外的处理:

import Tkinter as tk

def callback():
    print(list(text.get()))

root = tk.Tk()
root.config()

b = tk.Button(root, text="get", width=10, command=callback)

text=tk.StringVar()

entry = tk.Entry(root,textvariable=text)
b.pack(padx=5, pady=5)
entry.pack(padx=5, pady=5)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

如果您\nu + \lambda + \theta在输入框中键入,控制台将(正确)打印:

['\\', 'n', 'u', ' ', '+', ' ', '\\', 'l', 'a', 'm', 'b', 'd', 'a', ' ', '+', ' ', '\\', 't', 'h', 'e', 't', 'a']
Run Code Online (Sandbox Code Playgroud)

如果您的GUI没有返回类似的结果(如您的帖子似乎暗示的那样),那么我建议您着手解决GUI问题,而不是与string_escapeand string 混为一谈replace