簡體   English   中英

Python3,允許用戶輸入“\\ n”和“'”字符,但替換為“\\\\ n”和“\\\\”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM