[英]Python3, allowing user input of “ \n ” and “ ' ” characters but replace with “ \\n ” and “ \\' ”
提前感謝您的幫助......
我正在編寫一個將使用JSON響應的API。 我在Python 3.5.1編碼。 我允許用戶鍵入他們希望提交給Slack聊天的預定義消息,而Slack語法使用\\ n作為換行符,所以我的應用程序需要允許用戶在他們的消息中使用'\\ n'格式化他們的消息但是'\\ n'自然會弄亂我的Python,因為它只想在句子中創建一個新行,而不是打印出Slack需要看到的那個\\ n。
我想我會做的只是.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個傳遞的傳入字符串的任何想法?
你真正需要做的是用“\\\\ 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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.