PHP のストリップラッシュを有効な Python [バックスラッシュ] エスケープに変換するコードを書きました。
cleaned = stringwithslashes
cleaned = cleaned.replace('\\n', '\n')
cleaned = cleaned.replace('\\r', '\n')
cleaned = cleaned.replace('\\', '')
どうしたら凝縮できますか?
これがあなたが望むものかどうか完全にはわかりませんが..
cleaned = stringwithslashes.decode('string_escape')
正規表現を使用して、必要なものを合理的に効率的に処理できるように思えます。
import re
def stripslashes(s):
r = re.sub(r"\\(n|r)", "\n", s)
r = re.sub(r"\\", "", r)
return r
cleaned = stripslashes(stringwithslashes)
明らかに、すべてを連結できます。
cleaned = stringwithslashes.replace("\\n","\n").replace("\\r","\n").replace("\\","")
それはあなたが求めていたものですか?それとも、もっと簡潔なものを望んでいましたか?
Python には、PHP の addslashes に類似した組み込みの escape() 関数がありますが、unescape() 関数 (stripslashes) はありません。
救助への正規表現(コードはテストされていません):
p = re.compile( '\\(\\\S)')
p.sub('\1',escapedstring)
理論的には、\\(空白ではない) の形式を取り、\(同じ文字) を返します。
編集: さらに調べてみると、Python の正規表現は完全に壊れています。
>>> escapedstring
'This is a \\n\\n\\n test'
>>> p = re.compile( r'\\(\S)' )
>>> p.sub(r"\1",escapedstring)
'This is a nnn test'
>>> p.sub(r"\\1",escapedstring)
'This is a \\1\\1\\1 test'
>>> p.sub(r"\\\1",escapedstring)
'This is a \\n\\n\\n test'
>>> p.sub(r"\(\1)",escapedstring)
'This is a \\(n)\\(n)\\(n) test'
結論として、何だ、パイソン。