解决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 提取文件的小程序
Jul 29 Python
python实用代码片段收集贴
Jun 03 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
Jan 20 Python
详解Python pygame安装过程笔记
Jun 05 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
详解Python安装tesserocr遇到的各种问题及解决办法
Mar 07 Python
pytorch数据预处理错误的解决
Feb 20 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
Feb 26 Python
mac在matplotlib中显示中文的操作方法
Mar 06 Python
编写python代码实现简单抽奖器
Oct 20 Python
python Pexpect模块的使用
Dec 25 Python
python blinker 信号库
May 04 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
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
php天翼开放平台短信发送接口实现方法
2014/12/22 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
jquery实现两个div中的元素相互拖动的方法分析
2020/04/05 jQuery
用jQuery实现抽奖程序
2020/04/12 jQuery
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
2020/09/05 Javascript
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python中正则表达式的详细教程
2015/04/30 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
利用python如何处理nc数据详解
2018/05/23 Python
django连接mysql配置方法总结(推荐)
2018/08/18 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
Python 实现微信防撤回功能
2019/04/29 Python
Python循环结构的应用场景详解
2019/07/11 Python
python实现按行分割文件
2019/07/22 Python
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
计算机大学生的自我评价
2013/10/15 职场文书
爱与责任演讲稿
2014/05/20 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
食品药品安全责任书
2015/05/11 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书