2016-06-23 1 views
1

はあなたの援助のために事前にありがとう...のpython3、「 n」や「『『の可能ユーザの入力文字が、』\ nを『と』\に置き換え』」

私がコーディングしていますJSONレスポンスを使用するAPI。私はPython 3.5.1でコーディングしています。私はユーザーがSlackのチャットに提出したいと思っている定義済みのメッセージを入力できるようにしています。そして、Slackの構文は改行のために\ nを使うので、私のアプリはメッセージのフォーマットを '\ n' \ nスラックが見る必要がある\ nをプリントアウトするのではなく、単に文の中に新しい行を追加したいので、 '\ n'は自然に私のPythonを台無しにしています。

私がやったと思ったのは、単純に.replace( '\ n'、 '\\ n')なので、JSONは意図された '\ n'を得て、Pythonを気にしません。これはうまく動作しますが、私はまた、 "'"のインスタンスについてユーザーのメッセージをチェックし、 "\\'"と置き換える必要がありますので、自分のデータベースのSQLステートメントを妨げません。

私は辞書と、特定の文字のインスタンスをチェックし、一度にそれらを対応する値に置き換える方法を作っていると考えました。 strIn = "?あなた\ '再\ ngreatちゃん\で' あなたが知っているのLの\ nsurfingドン\ 'tは":

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

はこれをテストするには:ここで

は、私がこれまで持っているものです

私のメソッドを実行すると、正しく "'": "\\'"をキャッチしますが、 "\ n": "\\ n"は無視されます。別のstrIn.replace( "\ n": "\\ n")とstrIn.replace( "'": "\\'")としてこれらを実行すると動作します。私の方法で何が間違っていますか?

私はそれは私がしかし、それは非常にPython的に非常に冗長ではないたかったまさに行い、次のない場合:

更新 Vaylain


、ご協力ありがとうございました

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を1つに結合し、2つではなく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で置き換える必要がありますので、\ nのように見えます。 – vaylain

+0

さて、あなたはそれについて言及していませんでした。 1)ユーザーに有効な入力を入力させる 2)ユーザーが入力して有効な形式に修正した後に入力を確認する – Teemo

+0

私のAPIはSlack.comのために入力する必要があります。 \ nチャットで新しい行を追加する。私は通常のように\ nユーザーを欲しいですが、ユーザーのメッセージでその\ nを取って\ nに置き換えて、Pythonがそれを混乱させないようにしなければなりません。 #2のためのあなたの提案は私がしなければならないことです、それは私の元の質問です...私はこれを正しく行う方法を知らないので...私は\ nを挿入する必要があります。 \ nを\\ nに置き換えると、スラックAPIに\ nが表示されます... – vaylain

関連する問題