首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中处理字符串中的转义序列

在Python中处理字符串中的转义序列
EN

Stack Overflow用户
提问于 2010-10-26 11:43:57
回答 5查看 113.6K关注 0票数 133

有时,当我从文件或用户获得输入时,我会得到一个包含转义序列的字符串。我想处理转义序列in the same way that Python processes escape sequences in string literals

例如,假设myString定义为:

代码语言:javascript
复制
>>> myString = "spam\\neggs"
>>> print(myString)
spam\neggs

我想要一个函数(我称它为process)来做这件事:

代码语言:javascript
复制
>>> print(process(myString))
spam
eggs

重要的是,该函数可以处理Python中的所有转义序列(在上面的链接中的表中列出)。

Python有做这件事的函数吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-10-26 13:01:32

正确的做法是使用字符串转义代码对字符串进行解码。

代码语言:javascript
复制
>>> myString = "spam\\neggs"
>>> decoded_string = bytes(myString, "utf-8").decode("unicode_escape") # python3 
>>> decoded_string = myString.decode('string_escape') # python2
>>> print(decoded_string)
spam
eggs

不要使用AST或eval。使用字符串编解码器要安全得多。

票数 153
EN

Stack Overflow用户

发布于 2010-10-26 11:50:07

ast.literal_eval函数很接近,但它希望字符串首先被正确地引起来。

当然,Python对反斜杠转义的解释取决于字符串的引号方式(""r""u""、三重引号等),因此您可能希望将用户输入括在适当的引号中,并将其传递给literal_eval。将其括在引号中也可以防止literal_eval返回数字、元组、字典等。

如果用户键入您想要在字符串两边环绕的类型的不带引号的引号,事情可能仍然很棘手。

票数 10
EN

Stack Overflow用户

发布于 2019-03-05 06:45:56

这是一种很糟糕的方式,但在我试图解释字符串参数中传递的转义八进制数时,它对我很有效。

代码语言:javascript
复制
input_string = eval('b"' + sys.argv[1] + '"')

值得一提的是,eval和ast.literal_eval是有区别的(eval更加不安全)。请参阅Using python's eval() vs. ast.literal_eval()?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4020539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档