大家好,欢迎来到IT知识分享网。
转义字符-escape character
character 表示字符,包含两层含义,
1.字母
2.符号
转义: 改变含义 字符: 字母、符号 转义字符: 把 字母、符号 的含义改变了
注意:这里有 2 个常常被忽视、忽略、轻视的转义规则
,
1.一对一
的转义
,
就是说,\
只对离它最近
的那一个
,字母
或符号
进行转义
,
2.只进行表层转义
(即每个以\
开头的对子中,\
只对其后的字符进行唯一的一次转义),不会进行嵌套或者递归转义(举例:\\\\
在python 看到的结果是 \\
而不是 \
,即\\\\
是两组\\
,经过转义后剩下两个\
,\\\\
最终的结果是\\
。两组\\
各进行一次转义后剩下的两个\
虽然能凑成一对\\
但也不会再进行转义了。),这里看不懂就往下看,看到最后就明白什么意思了。
一
计算机语言中,用 \
实现转义
的功能
其实,就是人为规定,给\
多增加赋予了一个特殊的含义,\
本身是个符号 反斜杠
,同时它在编程语言
中,还具备一个含义是告诉编程语言
看到它的时候,就要开始做转义
的工作了。
c族、java、python 这些语言都要遵守这个规则,编程语言
一旦看到 \
,就知道 \
后面的字符
有了新的含义,跟在\
后面的字符
就不再是它原有具备的意思了。
来看,计算机语言中最典型的两个 被转了义的字母
LF/NL(Line Feed/New Line) 换行 \n
CR (Carriage Return) 回车 \r
当 字母
n
前面没有 \
的时候,它就是一个普通的英文字母(字母表中排序第 14 位) ,可以和别的字母站在一起,形成一个单词,这就是它的含义,
比如:sun、on、know
但是,当 字母
n
前面有 \
的时候,它就不再是那个普普通通的英文字母 n
了,它有了新的含义,这个含义,需要编程语言
在看到 \
的时候,去查询 计算机语言的规则(约定俗成、都必须遵守的章程),然后找到了它的新的含义是 回车
(Carriage Return) ,然后编程语言
就执行回车
的命令
,来实现回车功能
。
拿 python
语言来举个例子,
python
语言,是个有自己的解释器
的语言,顺便解释一下 解释器
,当你用记事本写了一段代码保存成了 py
文件,然后直接交给操作系统去执行,操作系统就懵逼了,你要嘎哈,你想嘎哈,面对着你编写的程序不知所措,这时候,就需要 python
用自带的 解释器
帮你把代码翻译给操作系统,操作系统就明白了原来你是让操作系统启动核弹发射器,然后操作系统就按照你的意图,跟随 python
解释器
的翻译一步一步执行你的代码去毁灭世界了。
用转义字符
就能解决这个棘手的问题,
在你的程序里写入代码 \n
,当程序运行的时候,python 看到符号 \
就知道 \
后面的 n
不再是普通字母了,于是立即去尝试解释并到编程语言
规则表里查到 n
是换行的意思,就进行了换行操作。你的程序就顺利的执行下去,全国人民笑开颜。
好了,目前我们知道了一个普通的字母
跟在\
后面就有了新的含义,那符号
捏?
二
咱们也别拐弯抹角的啦,直接上高难度的,\\
是啥意思,
拿上面的规则套呗,当程序中出现了\
,编程语言
就会开始准备做转义
处理, \
后面的字母、符号
,表示这个字母、符号
具备了新的意义,
但这次发现\
后面跟的不是字母
,而是符号
,一查规则表里说了,跟在\
后面的符号
,就变成了普通的符号
(文本的,字面上的,或者说字面打印),而不再具备其他的任何附加的功能和含义了,就是一个单纯的字面上的文本符号
,
来跑段代码试试:
1.\n
\n
表示换行,因此,字母a 和 字母b被打印到了不同的行上,
2.\\n
python 遇到第一个\
,开始准备做转义
的工作,发现后面不是字母
,是字符
,所以进行解释查规则表,把第二个\
的附加功能和多余的含义去掉(即第二个\n
不需要对其后面的字符进行转义工作),只保留其本身作为一个文本符号
的含义,因此就打印输出了符号和字母的组合\n
,最终打印结果是 a\nb
可见,在python代码中要输出文本符号
\
,就需要在它的前面再加上一个\
,即\\
三
加高难度,
加深理解
先看代码:
这说明,\
只对离它最近的那一个字符进行转义的工作,
实际上,如果给print中的代码标上序号的话,我们在打印结果中看到的应该是 第二、第四、第六个\
,而第一、第三、第五个\
完成了它的转义工作被消耗掉了。
四
假如我们在python
里再使用正则表达式模块re
,会有什么不同吗?
可见,对于我们给定的字符串 str_test 的里面包含了 6 个 \
反斜杠符号,
我们在 re
中指定的匹配规则是 :\\\\
,所以当程序执行到这里看到出现了\
,因此要开始进行解释转义工作了,连续的 4 个 \
,根据一对一
的原则,第一、第三个\
参与了转义解释工作被消耗掉,第二、第四个\
被剥夺了附加的功能和含义后作为纯粹的字面上的文本的符号
保留下来,即 \\
,而转义规则
说过,只进行表层转义
,不会嵌套、递归转义,所以,剩下的两个符号
\\
,不会进行第二轮的转义工作变成 \
。
因此,re
根据匹配规则,在字符串 str_test 里搜索 文本双字符(两个反斜杠) \\
,共找到 3 对 \
,即 3 个 \\
march the 07th 2023 Tuesday
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/160152.html