Python转义总结

时间:2021-07-09 00:36:24   收藏:0   阅读:29

本文通过介绍转义字符和相关案例来理清在Python中转义的工作原理

转义字符

在计算机科学与远程通信中,当转义字符放在字符序列时,它将对它后续的几个字符进行替代并解释。转义字符是元字符的一种特殊情况。通常,判定某字符是否为转义字符由上下文确定。转义字符即标志着转义序列开始的那个字符。--来自维基百科

Python字符串中的转义

os.path.exists(‘C:\new‘)
假如说C盘下有一个new文件夹,上面的做法肯定不好使,因为`\n`代表的是换行,正确的写法应该是下面两种的任一种
os.path.exists(‘C:\\new‘)
os.path.exists(r‘C:\new‘)
第一种方式是`\\`,即代表普通`\`,不再是转义字符
第二种方式是Python中的raw字符,意思就是不要里面的内容不要再进行转义

如果是C盘的Windows文件夹是不会有问题的,因为`\W`不会被转义
os.path.exists(‘C:\Windows‘)

所以了解常见的转义序列,才能知道何时双`\`何时单`\`

Python正则中的转义

上面讲的是在普通字符串中的转义,在正则中还有一层转义;
意思就是我们写的pattern,首先经过普通字符串的转义,得到的结果再进行正则字符串的转义
所以在写正则pattern时也可以加上r‘‘,这样就少了普通字符串的转义

案例

如果能把这些例子搞清楚,基本就掌握了转义的用法

a = re.search(‘\n‘,‘\\n\n\\‘)
print(a)
>>><re.Match object; span=(2, 3), match=‘\n‘>

b = re.search(‘\\n‘,‘\\n\n\\‘)
print(b)
>>><re.Match object; span=(2, 3), match=‘\n‘>

c = re.search(‘\\\n‘,‘\\n\n\\‘)
print(c)
>>><re.Match object; span=(2, 3), match=‘\n‘>

d = re.search(‘\\\\n‘,‘\\n\n\\‘)
print(d)
>>><re.Match object; span=(0, 2), match=‘\\n‘>

len(‘\\n\n\\‘)
>>>4

上面是案例及运行结果,下面进行分析
字符串\\n\n\\需要进行字符串转义,结果为\n换行符\,请注意换行符代表的是一个字符,可以通过len函数验证
pattern的转义结果直接使用箭头来表示
a.\n -> 换行符 -> 换行符
b.\\n -> \n -> 换行符
c.\\\n -> \换行符 -> 换行符
d.\\\\n -> \\n -> \n
所以与\n换行符\的匹配,a、b、c都是匹配的换行符,也就是(2,3)字符
d匹配的是\n,也就是(0,2)字符

还有一个案例,这个是与raw联系起来的

# 下面每块注释的第1行是pattern的转义过程,第2行是待匹配的字符串的转义过程(如果没有第2行,代表无需转义)

re.sub(‘\‘‘, ‘_‘, ‘\‘abc‘)
>>>_abc
# \‘ -> ‘ -> ‘
# \‘abc -> ‘abc

re.sub(r‘\\\‘‘, ‘_‘, r‘\‘abc‘)
>>>_abc
# \\\‘ -> \‘

re.sub(r‘\‘‘, ‘_‘, r‘\‘abc‘)
>>>\_abc
# \‘ -> ‘

re.sub(r‘\‘‘, ‘_‘, ‘\‘abc‘)
>>>_abc
# \‘ -> ‘
# \‘abc -> ‘abc

re.sub(‘\‘‘, ‘_‘, r‘\‘abc‘)
>>>\_abc
# \‘ -> ‘ -> ‘

总结

tips
文件读取,input输入都是raw字符
\加上没有转义含义的字符序列,等同于其字符序列本身

通过上述两个案例,应该可以理清Python中转义的用法了,如有错误,请大佬指正

参考

极客时间·涂伟忠·正则表达式入门课
https://stackoverflow.com/questions/6967204/how-is-n-and-n-interpreted-by-the-expanded-regular-expression

原文:https://www.cnblogs.com/makerdd/p/14988515.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!