提前感谢您的协助......
我正在编写一个使用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个传递的传入字符串的任何想法?
答案 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))