我对r
实际做了什么感到有些困惑,并且无法理解与之相关的其他解释。例如,s1
和s2
之间有什么区别:
s1 = r'this\\has\no\special\characters'
修改
s2 = 'this\\has\no\special\characters'
由于
答案 0 :(得分:2)
区别在于s1
在“this”和“has”之间有2个反斜杠而s2
只有1个。另外,s2
在\n
处获取换行符而s1
没有。如果你打印字符串,差异会变得非常明显。
基本上,在字符串文字前面有r
,你看到的是你得到的 1 。如果前面没有r
,python会将各种转义码(\t
,\n
,\\
等)转换为不同的字符(制表符,换行符,\等)< / p>
1 我知道有1个问题...... r'\'
是SyntaxError
......
答案 1 :(得分:2)
你可以看到,在第一种情况下,r
使它成为一个原始字符串,因此正确处理斜杠和任何控制字符(在第一种情况下,你现在有一个双斜杠),与字符串2进行比较\n
现在变为新行:
In [218]:
s1 = r'this\\has\no\special\characters'
print(s1)
s2 = 'this\\has\no\special\characters'
print(s2)
this\\has\no\special\characters
this\has
o\special\characters
要注意的是使用原始字符串构建路径,如果路径包含尾部反斜杠,则不会处理:
In [220]:
path = r'c:\mytemp\'
File "<ipython-input-220-ca80e74afea4>", line 1
path = r'c:\mytemp\'
^
SyntaxError: EOL while scanning string literal
答案 2 :(得分:0)
第一个(s1
)是正则表达式集,第二个只是一个字符串!并基于python doc
:
正则表达式使用反斜杠字符('\')
来表示特殊形式或允许使用特殊字符而不调用它们的特殊含义。这与Python在字符串文字中用于相同目的的相同字符的使用相冲突;例如,要匹配文字反斜杠,可能必须将'\\\\'
写为模式字符串,因为正则表达式必须为\\
,并且每个反斜杠必须表示为\\
常规Python字符串文字。
解决方案是使用Python的原始字符串表示法来表示正则表达式模式;在前缀为'r'
的字符串文字中,不会以任何特殊方式处理反斜杠。所以r“\ n”是包含'\'
和'n'
的双字符字符串,而“\ n”是包含换行符的单字符字符串。通常,模式将使用此原始字符串表示法在Python代码中表示。
所以你有:
>>> s1 = r'this\\has\no\special\characters'
>>> s1
'this\\\\has\\no\\special\\characters'
>>> s2 = 'this\\has\no\special\characters'
>>> s2
'this\\has\no\\special\\characters'