解决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连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 Python
Python迭代器和生成器介绍
Mar 06 Python
Python for Informatics 第11章 正则表达式(一)
Apr 21 Python
浅谈python中的getattr函数 hasattr函数
Jun 14 Python
Python基于多线程实现ping扫描功能示例
Jul 23 Python
浅谈django orm 优化
Aug 18 Python
python3+requests接口自动化session操作方法
Oct 13 Python
python numpy元素的区间查找方法
Nov 14 Python
详解Django-restframework 之频率源码分析
Feb 27 Python
给我一面国旗 python帮你实现
Sep 30 Python
详解Python修复遥感影像条带的两种方式
Feb 23 Python
解决Opencv+Python cv2.imshow闪退问题
Apr 24 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
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
Display SQL Server Version Information
2007/06/21 Javascript
Prototype Class对象学习
2009/07/19 Javascript
js获得网页背景色和字体色的方法
2014/03/21 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
JavaScript实现的简单幂函数实例
2015/04/17 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
pyside写ui界面入门示例
2014/01/22 Python
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
2014/07/09 Python
微信跳一跳python代码实现
2018/01/05 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
Python类继承和多态原理解析
2020/02/05 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
浅谈python出错时traceback的解读
2020/07/15 Python
详解Python IO编程
2020/07/24 Python
python中的对数log函数表示及用法
2020/12/09 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
2020/12/24 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
英国手机零售商:Carphone Warehouse
2018/06/06 全球购物
迷你分体式空调:SoGoodToBuy
2018/08/07 全球购物
综治工作心得体会
2014/09/11 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
建议书格式
2015/02/04 职场文书
2015年党员个人自我评价
2015/03/03 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
Pytest allure 命令行参数的使用
2021/04/18 Python
mysql查找连续出现n次以上的数字
2022/05/11 MySQL