PHP的striplashes的Python版本

时间:2008-08-17 01:23:50

标签: python string escaping

我编写了一段代码将PHP的striplashes转换为有效的Python [反斜杠]转义:

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

我怎么能压缩它?

5 个答案:

答案 0 :(得分:13)

不完全确定这是你想要的,但是......

cleaned = stringwithslashes.decode('string_escape')

答案 1 :(得分:3)

听起来你想要的东西可以通过正则表达式合理有效地处理:

import re
def stripslashes(s):
    r = re.sub(r"\\(n|r)", "\n", s)
    r = re.sub(r"\\", "", r)
    return r
cleaned = stripslashes(stringwithslashes)

答案 2 :(得分:0)

你显然可以将所有内容连接在一起:

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

那是你的追求吗?或者你希望得到更简洁的东西?

答案 3 :(得分:0)

使用decode('string_escape')

cleaned = stringwithslashes.decode('string_escape')

使用

  

string_escape :在Python源代码中生成一个适合作为字符串文字的字符串

或者像Wilson的回答一样连接replace()。

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

答案 4 :(得分:-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'

总之,到底是什么,Python。