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

2024-05-19 01:37:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我从用户输入的GUI文本框中读取一个字符串,并通过pandoc进行处理。字符串包含数学的乳胶指令,这些指令包含反斜杠字符。我想把这个字符串作为原始字符串发送给pandoc进行处理。但是像“\theta”这样的东西变成了tab和“heta”。

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

编辑:

谢谢戴维勒克斯,飞羊和联合国大学。但这些解决方案似乎都帮不了我。原因是,还有其他反斜杠字符在python中没有任何效果,但在latex中有意义。

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

\\lambda

在乳胶加工过程中不会经历的——它应该保持为lambda。

另一个编辑:

如果我能完成这项工作,我想我应该结束了。@马克:这三种方法都给出了我不想要的答案。

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

Tags: 方法lambda字符串用户编辑指令gui字符
3条回答
a='\nu + \lambda + \theta'
d=a.encode('string_escape').replace('\\\\','\\')
print(d)
# \nu + \lambda + \theta

这表明在nlt之前有一个反斜杠:

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

你的图形用户界面有点古怪。下面是一个通过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()

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

['\\', 'n', 'u', ' ', '+', ' ', '\\', 'l', 'a', 'm', 'b', 'd', 'a', ' ', '+', ' ', '\\', 't', 'h', 'e', 't', 'a']

如果您的GUI没有返回类似的结果(正如您的文章所建议的那样),那么我建议您考虑修复GUI问题,而不是使用string_escape和字符串replace

Python的原始字符串只是告诉Python解释器应该将反斜杠解释为文本斜杠的一种方法。如果您读取用户输入的字符串,则它们已经超过了可能是原始字符串的点。此外,用户输入很可能是按字面意思读入的,即“raw”。

这意味着口译发生在别的地方。但如果你知道它发生了,为什么不逃避反斜杠,无论是什么解释它?

s = s.replace("\\", "\\\\")

(请注意,您不能将r"\"作为“a raw string cannot end in a single backslash”执行,但我也可以将r"\\"用作第二个参数。)

如果这不起作用,你的用户输入是出于某种神秘的原因解释反斜杠,所以你需要一种方法告诉它停止。

如果要将现有字符串转换为原始字符串,则可以如下重新分配

s1 = "welcome\tto\tPython"
raw_s1 = "%r"%s1
print(raw_s1)

将打印

welcome\tto\tPython

相关问题 更多 >

    热门问题