解决Python正则表达式匹配反斜杠''\''问题


Posted in Python onJuly 17, 2019

在学习Python正则式的过程中,有一个问题一直困扰我,如何去匹配一个反斜杠(即“\”)?

一、引入

在学习了Python特殊字符和原始字符串之后,我觉得答案应该是这样的:

1)普通字符串:'\\'
2)原始字符串:r'\'
但事实上在提取诸如“3\8”反斜杠之前的数字时,我屡次碰壁,始终得不到结果。最终发现自己理解错了,原来原始字符串和“正则转义”没有一点关系;下面详细谈一谈。

二、字符串转义

反斜杠,在Python中比较特殊,就是它可以用来构成一些特殊字符,比如“\n”表示换行,“\t”表示制表符。下面是使用“\n”的一行代码:

>>>print ('Hello\World\nPython' )

结果为:

“Hello\World
Python“

可以看到其中的“\n”已转义为换行符,而“\W”没有发生转义,原因是“\W”在“字符串转义”中并不对应着特殊字符,没有特殊含义。

如果现在要求变了,要求不对“\n”转义为换行,而是原封不动输出为“Hello\World\nPython”,该怎么办呢?

1)可以这样写“Hello\World\\nPython”,这样输出的时候,“字符串转义”会把“\\”转义为“\”;
2)也可使用另一种方法:原始字符串;原始字符串(即r'...'):字符串中所有字符都直接按照字面意思来使用,不转义特殊字符。

下面是使用原始字符串的代码:

print r'Hello\World\nPython'

结果为:

“Hello\World\nPython”

可以清楚看到,在使用原始字符串之后,“\n”未被转义为换行符,而是直接被输出了。

三、正则转义

好了,上面讲的只是“字符串转义”。同理,在正则表达式中也存在转义,我们姑且先称其为“正则转义”,其与“字符串转义”完全不同,比如“\d”代表数字,“\s”代表空白符。下面我们先编写开头的例子,然后再分析。
提取“3\8”反斜杠之前的数字:

import re 
string = '3\8' 
m = re.search('(\d+)\\\\', string) 
if m is not None: 
print m.group(1) # 结果为:3 
n = re.search(r'(\d+)\\', string) 
if n is not None: 
print n.group(1) # 结果为:3

正则表达式字符串需要经过两次转义,这两次分别是上面的“字符串转义”和“正则转义”,个人认为“字符串转义”一定先于“正则转义”。

1)'\\\\'的过程:

先进行“字符串转义”,前两个反斜杠和后两个反斜杠分别被转义成了一个反斜杠;即“\\|\\”被转成了“\|\”(“|”为方便看清,请自动忽略)。“字符串转义”后马上进行“正则转义”,“\\”被转义为了“\”,表示该正则式需要匹配一个反斜杠。

2)r'\\'的过程:

由于原始字符串中所有字符直接按照字面意思来使用,不转义特殊字符,故不做“字符串转义”,直接进入第二步“正则转义”,在正则转义中“\\”被转义为了“\”,表示该正则式需要匹配一个反斜杠。

四、结论

也就是说原始字符串(即r'...')与“正则转义”毫无关系,原始字符串仅在“字符串转义”中起作用,使字符串免去一次转义。

总结

以上所述是小编给大家介绍的解决Python正则表达式匹配反斜杠''\''问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
解析Python中的二进制位运算符
May 13 Python
Python合并字典键值并去除重复元素的实例
Dec 18 Python
快速实现基于Python的微信聊天机器人示例代码
Mar 03 Python
python决策树之CART分类回归树详解
Dec 20 Python
python 在指定范围内随机生成不重复的n个数实例
Jan 28 Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 Python
Python模块、包(Package)概念与用法分析
May 31 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
Python中BeautifuSoup库的用法使用详解
Nov 15 Python
使用 Python ssh 远程登陆服务器的最佳方案
Mar 06 Python
对Python中 \r, \n, \r\n的彻底理解
Mar 06 Python
将keras的h5模型转换为tensorflow的pb模型操作
May 25 Python
python小程序实现刷票功能详解
Jul 17 #Python
python 获取sqlite3数据库的表名和表字段名的实例
Jul 17 #Python
Python math库 ln(x)运算的实现及原理
Jul 17 #Python
Python_查看sqlite3表结构,查询语句的示例代码
Jul 17 #Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 #Python
在SQLite-Python中实现返回、查询中文字段的方法
Jul 17 #Python
PIL图像处理模块paste方法简单使用详解
Jul 17 #Python
You might like
php常用数组函数实例小结
2016/12/29 PHP
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
javascript的console.log()用法小结
2012/05/31 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
vue中使用腾讯云Im的示例
2020/10/23 Javascript
[01:52]DOTA2完美大师赛Vega战队趣味视频——kpii老师小课堂
2017/11/25 DOTA
python计算书页码的统计数字问题实例
2014/09/26 Python
python通过post提交数据的方法
2015/05/06 Python
Python六大开源框架对比
2015/10/19 Python
有关Python的22个编程技巧
2018/08/29 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
培训讲师邀请函
2014/01/10 职场文书
自考生自我评价分享
2014/01/18 职场文书
环保建议书400字
2014/05/14 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
2015国际残疾人日活动总结
2015/03/24 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL