【发布时间】:2017-10-22 18:18:48
【问题描述】:
编辑
我不确定这个问题是否被正确阅读。
我已经知道 Python 中的字符串格式。
每一个小细节,我都已经知道了。
请停止向我提问有关 Python 中字符串类型的问题。
这是一个与问题字符串分隔符有关的特定问题
在 原始语法 构造的主体中。
我想知道为什么我不能在此使用原始语法 r"" 或 r'' 形式
原始字符串"word's" 并让它像这样存在于变量中。
我为什么要这样做并不重要,但我已经在下面解释了。
谢谢。
我只是在讨论一些语法规则来解析和创建
使用 r' ' 和 r" " 的原始字符串语法规则的字符串。
作为记录,我已阅读 docs 和有关原始字符串的规则。
该问题特定于转义原始字符串中的分隔符。
我有一个实用程序可以解析/生成其他字符串类型并被使用
在生产代码中。
当字符串在变量中时,Python 不会删除转义分隔符的 escape,这让我感到困惑。
这是设计使然,即。不删除分隔符上的转义符或我是什么
希望,这只是解析过程中遗漏的一部分。
基本上,一个错误?
如果在解析后,字符串实际上不是原始图像的原始图像
看起来不像原来的。
解析后,在一个变量中,它现在变得无用了。
这是一个疏忽吗,将来可能会更正吗?
现在,在我的实用程序中,我只能创建原始语法形式,但由于
这个错误,除非我从分隔符中取消转义,否则我无法解析它。
我的意思是,我想我可以这样做,因为它与制作字符串是直接相反的,
但令人不安的是,词法解析器将这种人为的转义留在了变量 after
解析过程。
这是我用来验证问题的一些代码:
代码
#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"
输出
Raw targt string test = "word's"
using r' ' syntax, variable contains "word\'s"
using r" " syntax, variable contains \"word's\"
length's are NOT equal
要么
【问题讨论】:
-
r是一条指令 not 以任何特殊方式解释字符串中的任何字符。此外,Python 解释器不会将单引号和双引号区分为字符串分隔符,只要它们成对匹配即可。字符串的以下表示完全等价:r'\'''\\\''"\\\'""\\'"r"\'"。这些表示中的每一个都引用由文字反斜杠和单引号组成的双元素字符串。 -
@DYZ - 这不是重复的,请阅读我的问题。另外,我不关心 C 风格的字符串,只关心原始语法文字。如果没有办法使用原始字符串语法将这个原始字符串
"word's"放入变量中,不变,那么如果它是有意的,那么它是无用的。如果不是故意的,这是一个错误。这就是我的全部问题。我很好奇这种有害行为是否会在未来得到治愈,或者任何其他见解。就是这样。 -
你的问题,坦率地说,相当混乱。
r唯一做的就是关闭反斜杠的特殊含义。如果您的字符串没有任何反斜杠,添加r没有区别 -
@sln - 它不是没用的,它在编写正则表达式时非常有用,而且您不必转义每个反斜杠。仅此一项就可以节省时间。它旨在像那样工作 - 或者更确切地说,交换双引号和单引号时的“不一致”外观是 Python 语法的附属品 - 如果你可以以任何其他方式告诉解释器什么是字符串边界,你就不会遇到问题带有“原始”字符串。
标签: python regex parsing rawstring