编辑
我不确定这个问题是否正确阅读。
我已经知道Python中的字符串格式。
每一个细节,我都知道。
请不要再把我引向关于Python中字符串类型的问题。在
这是一个与问题字符串分隔符有关的特定问题
在一个原始语法结构体中。在
我想知道为什么我不能在这个
原始字符串"word's"
,并将其存在于这样的变量中。在
我为什么要这么做并不重要,但我已经在下面解释了。在
谢谢。在
我只是在复习一些语法规则来解析和创建
使用r' '
和r" "
的原始字符串语法规则的字符串。在
For the record, I have read the docs and rules on raw strings.
The question is specific to escaping the delimiter within the raw string.
我有一个实用程序,可以解析/生成其他字符串类型,并使用
生产代码中。在
当字符串在变量中时,Python没有删除转义分隔符的escape,这让我感到困惑。在
这是故意的吗,即不删除分隔符上的转义符还是我的身份
希望,只是解析过程中遗漏的一部分。
基本上,一只虫子?在
如果在解析之后,字符串确实不是原始图像的原始图像,则字符串
不像原版。
解析之后,在一个变量中,它现在变得无用了。在
这是否是一种疏忽,也可能是将来要纠正的问题?在
现在,在我的实用程序中,我只能创建一个原始语法形式,但是由于
这个bug,我无法解析它,除非我从分隔符中去掉转义符。在
我的意思是,我想我可以这样做,因为它是字符串的逆函数,
但令人不安的是,词法分析器在
解析过程。在
下面是一些我用来验证问题的代码:
代码
#python 2.7.12
print "Raw targt string test = \"word's\""
v1 = r' "word\'s" ' # => "word\'s"
v2 = r" \"word's\" " # => \"word's\"
print "using r' ' syntax, variable contains " + v1
print "using r\" \" syntax, variable contains " + v2
if len(v1) == len(v2) :
print "length's are equal"
else :
print "length's are NOT equal"
输出
^{pr2}$或者
这不是一个错误,这是有意的行为。当使用
r
时,你告诉解释器解释你的字符串,好吧,原始的-这意味着关闭所有转义序列并将反斜杠视为普通字符:因为反斜杠被视为一个文字字符,所以当你做
r' "word\'s" '
时,它就相当于写' "word\\\'s" '
,而且双引号字符串有不同的转义序列:r" \"word's\" "
,它相当于:' \\"word\'s\\" '
-因此,它们不匹配(再加上一个反斜杠,加上不同的位置)。在不幸的是,由于字符串必须是单引号或双引号,因此必须在单引号字符串中转义单引号,在双引号字符串中转义双引号,但是
r
指令告诉解释器按字面意思处理所有转义。此外,r
从来没有打算用于字符串操作。在引用Python FAQ,Python中的原始字符串字面值“被设计成便于为那些希望自己进行反斜杠转义处理的处理器(主要是正则表达式引擎)创建输入”。由于regex引擎将删除引号字符前面的反斜杠,因此Python不需要去除它。这种行为很可能永远不会改变,因为它会严重破坏向后兼容性。在
所以,是的,它是设计的,虽然它很混乱。在
Python的原始字符串文本并不是为了能够表示所有可能的字符串而设计的。特别是,字符串}是等价的(即它们都匹配单个字符串
"'
不能在r""
或r''
内表示。当您为regex模式使用原始字符串文本时,这不是问题,因为模式\"'
、"\'
、"'
和{"'
)。在但是,请注意,您可以使用三重引号的原始字符串文本
r'''"word's"'''
来编写字符串"word's"
。在相关问题 更多 >
编程相关推荐