创建并分析Python原始字符串文本R“”

2024-04-26 13:45:59 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑
我不确定这个问题是否正确阅读。
我已经知道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}$

或者


Tags: the字符串代码实用程序类型stringraw规则
2条回答

这不是一个错误,这是有意的行为。当使用r时,你告诉解释器解释你的字符串,好吧,原始的-这意味着关闭所有转义序列并将反斜杠视为普通字符:

Both string and bytes literals may optionally be prefixed with a letter 'r' or 'R'; such strings are called raw strings and treat backslashes as literal characters. As a result, in string literals, '\U' and '\u' escapes in raw strings are not treated specially.

因为反斜杠被视为一个文字字符,所以当你做r' "word\'s" '时,它就相当于写' "word\\\'s" ',而且双引号字符串有不同的转义序列:r" \"word's\" ",它相当于:' \\"word\'s\\" '-因此,它们不匹配(再加上一个反斜杠,加上不同的位置)。在

不幸的是,由于字符串必须是单引号或双引号,因此必须在单引号字符串中转义单引号,在双引号字符串中转义双引号,但是r指令告诉解释器按字面意思处理所有转义。此外,r从来没有打算用于字符串操作。在

引用Python FAQ,Python中的原始字符串字面值“被设计成便于为那些希望自己进行反斜杠转义处理的处理器(主要是正则表达式引擎)创建输入”。由于regex引擎将删除引号字符前面的反斜杠,因此Python不需要去除它。这种行为很可能永远不会改变,因为它会严重破坏向后兼容性。在

所以,是的,它是设计的,虽然它很混乱。在

I want to know why I can't use the raw syntax r"" or r'' form on this raw string "word's" and have it exist in a variable just like this.

Python的原始字符串文本并不是为了能够表示所有可能的字符串而设计的。特别是,字符串"'不能在r""r''内表示。当您为regex模式使用原始字符串文本时,这不是问题,因为模式\"'"\'"'和{}是等价的(即它们都匹配单个字符串"')。在

但是,请注意,您可以使用三重引号的原始字符串文本r'''"word's"'''来编写字符串"word's"。在

相关问题 更多 >