13

PHP のストリップラッシュを有効な Python [バックスラッシュ] エスケープに変換するコードを書きました。

cleaned = stringwithslashes
cleaned = cleaned.replace('\\n', '\n')
cleaned = cleaned.replace('\\r', '\n')
cleaned = cleaned.replace('\\', '')

どうしたら凝縮できますか?

4

5 に答える 5

13

これがあなたが望むものかどうか完全にはわかりませんが..

cleaned = stringwithslashes.decode('string_escape')
于 2008-08-17T12:15:13.170 に答える
3

正規表現を使用して、必要なものを合理的に効率的に処理できるように思えます。

import re
def stripslashes(s):
    r = re.sub(r"\\(n|r)", "\n", s)
    r = re.sub(r"\\", "", r)
    return r
cleaned = stripslashes(stringwithslashes)
于 2008-08-17T12:55:25.100 に答える
0

明らかに、すべてを連結できます。

cleaned = stringwithslashes.replace("\\n","\n").replace("\\r","\n").replace("\\","")

それはあなたが求めていたものですか?それとも、もっと簡潔なものを望んでいましたか?

于 2008-08-17T01:26:52.043 に答える
-4

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'

結論として、何だ、パイソン。

于 2008-08-17T10:28:00.967 に答える