Python3,允许用户输入“\ n”和“'”字符,但替换为“\\ n”和“\\”

时间:2016-06-23 10:51:32

标签: python json python-2.7 sqlite python-3.x

提前感谢您的协助......

我正在编写一个使用JSON响应的API。我在Python 3.5.1编码。我允许用户键入他们希望提交给Slack聊天的预定义消息,而Slack语法使用\ n作为换行符,所以我的应用程序需要允许用户在他们的消息中使用'\ n'格式化他们的消息但是'\ n'自然会弄乱我的Python,因为它只想在句子中创建一个新行,而不是打印出Slack需要看到的那个\。

我想我会做的只是.replace('\ n','\\ n')所以JSON仍然会得到预期的'\ n'并且不会打扰Python。这工作正常但我还需要检查用户的消息中的“'”实例并将其替换为“\\”,这样它就不会妨碍我的数据库的SQL语句。

我想我会创建一个字典和方法来检查某些字符的实例,并将它们一次性替换为相应的值。

这是我到目前为止所做的:

def replace_all(strIn):
    keywords = {"'": "\\'", "\n": "\\n"}
    for a, b in keywords.items():
            strOut = strIn.replace(a, b)
return strOut

测试一下: strIn =“你不知道怎么回事?你不知道吗?”

当我运行我的方法时,我正确地抓住了“'”:“\\”“但是”\ n“:”\\ n“被忽略了。如果我将它们作为单独的strIn.replace(“\ n”:“\\ n”)和strIn.replace(“'”:“\\'”)执行,它就可以工作。我的方法有什么问题?

再次感谢您的协助, Vaylain

更新:

如果我执行以下操作,它确实完全符合我的要求,但它非常详细而且不是非常Pythonic:

def checkString(self, strIn):
keywords1 = {"'": "\\'"}
keywords2 = {"\n": "\\n"}
for a, b in keywords1.items():
        pass1 = strIn.replace(a, b)

for a, b in keywords2.items():
        strOut = pass1.replace(a, b)

return strOut

关于如何将两个dicts组合成一个并使方法适用于两个而没有2个传递的传入字符串的任何想法?

1 个答案:

答案 0 :(得分:0)

你真正需要做的是用“\\ n”来逃避整个“\ n”,当你用“\\ n”来逃避它时,我会做这样的事情:

def replace_all(strIn):
    strOut = ""
    keywords = {"'": "\\'", "\\n": "\\\n"}
    for a, b in keywords.items():
        strOut = strIn.replace(a, b)
    return strOut

strIn = "You\'re \\ngreat at chan\'l \\nsurfing don\'t you know?"

print(replace_all(strIn))