解决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中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
python Django批量导入不重复数据
Mar 25 Python
python3中set(集合)的语法总结分享
Mar 24 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
python实现换位加密算法的示例
Oct 14 Python
Python中Proxypool库的安装与配置
Oct 19 Python
Python实现简易过滤删除数字的方法小结
Jan 09 Python
Python实现截取PDF文件中的几页代码实例
Mar 11 Python
python word转pdf代码实例
Aug 16 Python
将自己的数据集制作成TFRecord格式教程
Feb 17 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
Mar 20 Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
Jun 07 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
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
PHP编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
JavaScript中null与undefined分析
2009/07/25 Javascript
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
jQuery内置的AJAX功能和JSON的使用实例
2014/07/27 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
深入了解JavaScript 私有化
2019/05/30 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
对Layer弹窗使用及返回数据接收的实例详解
2019/09/26 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
Python使用sorted排序的方法小结
2017/07/28 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
pip matplotlib报错equired packages can not be built解决
2018/01/06 Python
python后端接收前端回传的文件方法
2019/01/02 Python
python编写计算器功能
2019/10/25 Python
使用Python pip怎么升级pip
2020/08/11 Python
在线课程:Skillshare
2019/04/02 全球购物
木马的传播途径主要有哪些
2016/04/08 面试题
教师实习自我鉴定
2013/12/14 职场文书
地理科学专业自荐信
2014/09/01 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2016春节慰问信范文
2015/03/25 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书