【python之re模块学习第3天】正则表达式的应用:转义及原生字符串

1 python的转义

  1. 含义:转义字符是一个计算机专业词汇,在python里用反斜杠\表示转义字符。
  2. 功能:在计算机当中,我们可以写出123 ,也可以写出字母abcd,但有些字符我们无法手动书写,比如我们需要对字符进行换行处理,但不能写出来换行符,当然我们也看不见换行符。像这种情况,我们需要在字符中使用特殊字符时,就需要用到转义字符。
  3. 例子:在下述代码中,用\n表示换行符;用\'表示将单引号作为字符输出,此时单引号不具备闭合字符串功能;用\"将双引号作为字符输出,此时双引号不具备闭合字符串功能;在\\中,第一个反斜杠表示的是转义,第二个表示的是被转义的对象是一个反斜杠,将第二个反斜杠作为字符输出,该反斜杠不具备转义功能。
#例子1
print('hello\nworld')
#输出如下,两个单词间将存在换行符
#hello
#world

#例子2
print('\',\"')
#输出结果为 ',"

#例子3
print('\\')
#输出结果为 \
  1. 常见的转义功能:
转义字符描述
\在行尾续行符
|反斜杠符号
单引号
"双引号
\a响铃
\b退格(Backspace)
\000
\n换行
\v纵向制表符
\t横向制表符
\r回车
\f换页
\0yy八进制数,yy代表的是字符,例如\012代表的是换行,其中0是数字0
\xyy十六进制数,yy代表的是字符,例如\x0a代表的是换行
\other其他字符以普通格式输出

2 正则表达式的转义

  1. 如果使用正则表达式匹配特殊字符,需要加上反斜杠\来表示转义。
  2. 需要转义的特殊字符包括各个元字符:*、+、?、^、$、[、]、(、)、{、}、|、\,另外需要注意的还有\d、\D、\w、\W、\s、\S、\A、\Z、\b、\B
  3. 过程:正则过程中,匹配模式的字符串需要先经过python解析(能转义的会先转义),其解析结果才是匹配模式的内容。
    python字符串 ====》  正则匹配模式  ====》  匹配目标字符串
    ‘\d+\\\d+’    ====》    ‘\d+**\d+’   ====》   ‘2**16’
    ‘\d+**\d+’   ====》   ‘\d+**\d+’   ====》   ‘2**16’
    ‘\\\\’       ====》    ‘\\’     ====》   ‘ggg\ggg’

2.1 python本身不转义的符号

  1. 包括:*、+、?、^、$、[、]、(、)、{、}、|、\d、\D、\w、\W、\s、\S、\A、\Z、\B
  2. 由于python对字符串'\d'不会有转义效果出现,而对'\\d'会先将反斜杠进行转义,转义后其内容与前者一致,所以匹配结果一致。
  3. 例子:
import re
print(re.findall('\d+\*\*\d+','2**16'))				#输出 ['2**16']
print(re.findall('\\d+\\*\\*\\d+','2**16'))			#输出 ['2**16'],与上进行对比。
print(re.findall('-?\d+.?\d*','12 -36 -28.2 1.34'))	#输出 ['12 ', '-36 ', '-28.2', '1.34']

2.2 python本身转义的符号

  1. 包括:\、\b
  2. 缺点:理解不直观。
  3. 在正则表达式中,匹配模式是采用字符串来描述的,如果是要匹配字符串中的反斜杠,匹配模式的写法就会很混乱,需要写4个反斜杠。
  4. 首先是python对这个字符串的解析,第1和第3个反斜杠作为转义字符,第2和第4个作为被转义字符,也就是python将该字符串解析为两个反斜杠,也就是匹配模式其实内容是两个反斜杠。
  5. 然后在正则函数使用时,匹配模式的第一个反斜杠作为转义字符,表示要找到被转义的内容,也就是一个反斜杠。
import re
print(re.findall('\\\\','qqq\gqqq'))			#输出['\\'],输出结果的第一个符号表示的是转义,其实是匹配到一个反斜杠
print(re.findall('\\\\','qqq\\gqqq'))			#输出['\\'],\\被python解析为一个反斜杠,所以没有匹配到。
print(re.findall('\\\\','qqq\agqqq'))			#输出[],\a被python解析为响铃符号,不是反斜杠,所以没有匹配到。

print(re.findall('\bis\b',"This is a test."))	#输出[],因为\b先被转义成退格符,相当于该语句是匹配目标字符串中的退格符。
print(re.findall('\\bis\\b',"This is a test."))	#输出['is']

3 原生字符串

  1. Python中字符串前面加上 r 表示原生字符串,python对于原生字符串不会进行转义,也就是所见及所得。
  2. 与上述例子对比理解原生字符串的输出。
print(r'hello\nworld')	#输出 hello\nworld
print(r'\',\"')			#输出 \',\"
print(r'\\')			#输出 \\
  1. 正则表达式中原生字符串的应用的优点:避免了多重转义带来的书写和理解上的麻烦。
import re
print(re.findall(r'\\',r'qqq\gqqq'))			#输出['\\']
print(re.findall(r'\\',r'qqq\\gqqq'))			#输出['\\', '\\']
print(re.findall(r'\\',r'qqq\agqqq'))			#输出['\\'],因为\a不再进行转义

print(re.findall(r'\bis\b',r"This is a test."))	#输出['is']
print(re.findall(r'\\bis\\b',r"This is a test."))	#输出[],相当于是匹配\bis\b。

4 总结

  1. 掌握python对字符串的转义规则;
  2. 掌握正则表达式的转义规则;
  3. 理解当python和正则双重转义的顺序及其影响;
  4. 理解原生字符串的优点并掌握其使用方法。

参考文献

  1. RE正则表达式模块(Python视频教程)
  2. RE正则表达式模块(Python视频教程)
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值