解决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 04 Python
全面了解Python环境配置及项目建立
Jun 30 Python
Python内建函数之raw_input()与input()代码解析
Oct 26 Python
python实现Floyd算法
Jan 03 Python
PyQt5实现下载进度条效果
Apr 19 Python
pycharm配置git(图文教程)
Aug 16 Python
python检测服务器端口代码实例
Aug 31 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
python使用pandas抽样训练数据中某个类别实例
Feb 28 Python
Django 实现将图片转为Base64,然后使用json传输
Mar 27 Python
详解python 内存优化
Aug 17 Python
用 python 进行微信好友信息分析
Nov 28 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查询数据库中满足条件的记录条数(两种实现方法)
2013/01/29 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
什么情况下可以不写PHP的闭合标签“?>”
2014/08/28 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
PHP反射基础知识回顾
2020/09/10 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
php实现记事本案例
2020/10/20 PHP
jQuery 性能优化手册 推荐
2010/02/23 Javascript
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
2018/06/19 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
Pytorch 多维数组运算过程的索引处理方式
2019/12/27 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
人力资源行政经理自我评价
2013/10/23 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
网络营销计划
2015/01/17 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
学校实习推荐信
2015/03/27 职场文书
幼儿园工作总结2015
2015/04/01 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android
Python中time标准库的使用教程
2022/04/13 Python
服务器SVN搭建图文安装过程
2022/06/21 Servers
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技