解决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代码制作configure文件示例
Jul 28 Python
Python基础之函数用法实例详解
Sep 10 Python
Python中的面向对象编程详解(下)
Apr 13 Python
Python(Django)项目与Apache的管理交互的方法
May 16 Python
python中的turtle库函数简单使用教程
Jul 23 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
python用插值法绘制平滑曲线
Feb 19 Python
Python爬虫之UserAgent的使用实例
Feb 21 Python
Django对数据库进行添加与更新的例子
Jul 12 Python
解决Djang2.0.1中的reverse导入失败的问题
Aug 16 Python
Python编写一个验证码图片数据标注GUI程序附源码
Dec 09 Python
使用Keras加载含有自定义层或函数的模型操作
Jun 10 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实现的简单压缩英文字符串的代码
2008/04/24 PHP
定义php常量的详解
2013/06/09 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
angularJS 入门基础
2015/02/09 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
webpack安装配置与常见使用过程详解(结合vue)
2020/06/01 Javascript
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
Python2.7 实现引入自己写的类方法
2018/04/29 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
selenium+Chrome滑动验证码破解二(某某网站)
2019/12/17 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
Python 3.9的到来到底是意味着什么
2020/10/14 Python
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
外包公司软件测试工程师
2014/11/01 面试题
外国人聘用意向书
2014/04/01 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书
特种设备安全管理制度
2015/08/06 职场文书
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python
分布式架构Redis中有哪些数据结构及底层实现原理
2022/03/13 Redis