2016-06-23 59 views
1

預先感謝您爲您的幫助......Python3,「 n」和「‘‘的允許用戶輸入的字符,但是’\ n‘和’\替換’」

我編碼的將使用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 

爲了測試這個: 〜應變= 「你\ '重新\ ngreat在陳\' L \ nsurfing不要\'你不知道」

當我運行我的方法時,我正確地抓住了「'」:「\\'」,但「\ n」:「\\ n」被忽略。如果我將它們作爲獨立的strIn.replace(「\ n」:「\\ n」)和strIn.replace(「'」:「\\'」)執行。我在做什麼錯我的方法?

再次感謝您的幫助, Vaylain


更新時間:

如果我做了以下這不正是我想要的但它是非常詳細,而不是非常符合Python:

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 

任何想法如何將兩個字符串合併爲一個,並獲得該方法的工作,而不是2通過傳入的字符串?

+0

「...所以JSON仍然會得到......」什麼? JSON需要獲得什麼?你編碼它,它完成。 –

回答

0

你真正需要做的是用「\\ n」轉義整個「\ 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)) 
+0

這個問題是我不控制strIn,因爲這是用戶的輸入。我需要檢查他們的輸入和他們輸入的任何實例\ n,我需要檢查並用\\ n替換它,所以它看起來像Python。 – vaylain

+0

那麼,你沒有提到它的問題。現在你有2個選項: 1)強制用戶輸入有效的輸入 2)檢查輸入後,用戶輸入並糾正有效格式 – Teemo

+0

我需要用戶輸入\ n作爲我的API是Slack.com和他們使用\ n在聊天中添加新行。我希望用戶像普通用戶一樣,但是我必須在用戶的消息中使用\ n,並用\\ n替換它,這樣Python就不會搞砸了。您對#2的建議是我需要做的,只是這是我的原始問題...因爲我不知道如何正確執行此操作......我需要用戶插入\ n,我需要python來檢查它並用\\ n替換\ n,所以\ n仍然會出現在Slack API中... – vaylain

相關問題