有时当我从文件或用户那里获得输入时,我会得到一个包含转义序列的字符串.我想以与Python处理字符串文字中的转义序列相同的方式处理转义序列.
例如,假设myString定义为:
>>> myString = "spam\\neggs"
>>> print(myString)
spam\neggs
Run Code Online (Sandbox Code Playgroud)
我想要一个函数(我会称之为process)这样做:
>>> print(process(myString))
spam
eggs
Run Code Online (Sandbox Code Playgroud)
重要的是该函数可以处理Python中的所有转义序列(在上面链接的表中列出).
Python有功能吗?
假设我有一个字符串,它是另一个字符串的反斜杠转义版本.在Python中,有一种简单的方法可以解除字符串的问题吗?例如,我可以这样做:
>>> escaped_str = '"Hello,\\nworld!"'
>>> raw_str = eval(escaped_str)
>>> print raw_str
Hello,
world!
>>>
Run Code Online (Sandbox Code Playgroud)
但是,这涉及将(可能不受信任的)字符串传递给eval(),这是一个安全风险.标准库中是否有一个函数,它接受一个字符串并产生一个没有安全隐患的字符串?
我有一个看起来像这样的字符串:
"{\\x22username\\x22:\\x229\\x22,\\x22password\\x22:\\x226\\x22,\\x22id\\x22:\\x222c8bfa56-f5d9\\x22, \\x22FName\\x22:\\x22AnkQcAJyrqpg\\x22}"
Run Code Online (Sandbox Code Playgroud)
据我了解\x22是".那么我怎么能把它转换成一个可读的JSON,并带有键和值的引号?
如何反向重新逃生?这个2007年的博客说没有反向功能,但是十年后仍然如此吗?
Python 2 decode('string_escape')不适用于所有转义的字符(例如空格)。
>>> re.escape(' ')
'\\ '
>>> re.escape(' ').decode('string-escape')
'\\ '
Run Code Online (Sandbox Code Playgroud)
Python的3:有些人建议 unicode_escape或codec.escape_decode或ast.literal_eval但空间没有运气。
>>> re.escape(b' ')
b'\\ '
>>> re.escape(b' ').decode('unicode_escape')
'\\ '
>>> codecs.escape_decode(re.escape(b' '))
(b'\\ ', 2)
>>> ast.literal_eval(re.escape(b' '))
ValueError: malformed node or string: b'\\ '
Run Code Online (Sandbox Code Playgroud)
那么这真的是唯一有效的方法吗?
>>> re.sub(r'\\(.)', r'\1', re.escape(' '))
' '
Run Code Online (Sandbox Code Playgroud) 我已经检查了此解决方案,但在python3中不起作用。
我有一个这样的转义字符串:str = "Hello\\nWorld"而且我想获得未转义的相同字符串:str_out = Hello\nWorld
我尝试了这个没有成功: AttributeError: 'str' object has no attribute 'decode'
这是我的示例代码:
str = "Hello\\nWorld"
str.decode('unicode_escape')
Run Code Online (Sandbox Code Playgroud)