繁体   English   中英

在python字符串和正则表达式中使用斜杠

[英]The use of slash in python string and regex

例:

s = r't\s t t\\s'
print(re.findall('\s',s))
print(re.findall('\\s',s))

我发现这两个语句输出相同的结果: [' ', ' '] ,这表明\\s\\\\s在Python的字符串类中是相同的。 实际上,当我在Python的交互界面中键入以下代码时,我得到了:

>>> str1 = '\s'
>>> str1
'\\s'

因此,似乎python会将\\s转换为\\\\s Python为什么要这样做,这是做什么用的? 其他语言(例如Java)是否一样?

实际上,我要问的是:在Python中,如果要匹配空格,则我输入的regex和String都可以是"\\s" ,对吗? 但是,在Java中,正则表达式应为"\\s" ,而字符串应为"\\\\s" 两种语言似乎对字符串“ \\ s”的处理不同。 为什么?

Python只是在转义它,因此当它看到“ \\”后接字母时,如果该字母没有任何特殊含义,则Python实际上会转义反斜杠,而不是抛出任何错误。

Python交互式界面使用repr返回包含对象的可打印表示形式的字符串。 因此该函数添加了额外的反斜杠以指示它是文字反斜杠。

如果使用打印功能显示str1的值,则将在标准输出中仅用1个反斜杠打印它。

看这个例子:

str1 = '\s'

print str1
print str1.__repr__()

所以看来python会转换\\ sto \\ s。

不要将字符串表示形式与字符串的实际内容混淆。 字符串表示形式是您在源代码中编写字符串的方式,该方式可能与内存中的实际字符串不完全相同。 反斜杠经过专门分析,使您可以使用反斜杠语法编写不可打印的字符。 在这种情况下,\\ s不是有效的转义序列,因此python解析器将其字面解释为反斜杠-s。 在内存中,字符串仍然是包含字母的字符序列:\\,s

str类具有__repr__() / repr()方法,该方法返回包含该字符串的源代码表示形式的字符串,这是在REPL中不使用print语句时将被打印的字符串。 这使您可以复制粘贴这些字符串并在外壳的另一部分中重复使用,但这并不是真正存储在内存中的内容以及python如何解释字符串。 当打印repr时 ,python总是转义文字反斜杠,这是为了消除关于将反斜杠解释为转义序列还是文字字符的歧义。

Python为什么要这样做,这是做什么用的? 其他语言(例如Java)是否一样?

大多数语言的字符串文字都会解释反斜杠转义序列,尽管不同的语言对无效转义序列的处理方式也有所不同。 在Python中,无效的反斜杠转义序列被静默视为文字反斜杠,而不产生错误。 在Python中,您可能会更经常遇到这种问题,因为它具有无处不在的repr()协议,并且在REPL shell中默认使用了repr

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM