解决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 相关文章推荐
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
May 06 Python
Python基于Tkinter的HelloWorld入门实例
Jun 17 Python
Python中list初始化方法示例
Sep 18 Python
python模拟登录并且保持cookie的方法详解
Apr 04 Python
python操作redis方法总结
Jun 06 Python
pytorch训练imagenet分类的方法
Jul 27 Python
用uWSGI和Nginx部署Flask项目的方法示例
May 05 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
Dec 20 Python
python实现UDP协议下的文件传输
Mar 20 Python
python进度条显示之tqmd模块
Aug 22 Python
Python接口自动化测试的实现
Aug 28 Python
Python爬虫之爬取最新更新的小说网站
May 06 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中使用接口实现工厂设计模式的代码
2012/06/17 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
php pdo oracle中文乱码的快速解决方法
2016/05/16 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
2011/04/27 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
2017/08/11 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
Python时间和字符串转换操作实例分析
2019/03/16 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
Python任务调度利器之APScheduler详解
2020/04/02 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
美国购车网站:TrueCar
2016/10/19 全球购物
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
经济与贸易专业应届生求职信
2013/11/19 职场文书
会计专业毕业生求职信分享
2014/01/03 职场文书
员工工作表现评语
2014/04/26 职场文书
检讨书模板大全
2015/05/07 职场文书
预备党员表决心的话
2015/09/22 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
工作简历的自我评价
2019/05/16 职场文书
用Python写一个简易版弹球游戏
2021/04/13 Python
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL