解决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程序抓取网页的HTML信息的一个小实例
May 02 Python
利用PyInstaller将python程序.py转为.exe的方法详解
May 03 Python
Python利用itchat库向好友或者公众号发消息的实例
Feb 21 Python
Python-Tkinter Text输入内容在界面显示的实例
Jul 12 Python
Python 面向对象之类class和对象基本用法示例
Feb 02 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
Django 项目布局方法(值得推荐)
Mar 22 Python
python爬虫学习笔记之pyquery模块基本用法详解
Apr 09 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 Python
Python ORM框架Peewee用法详解
Apr 29 Python
python 获取剪切板内容的两种方法
Nov 28 Python
scrapy-splash简单使用详解
Feb 21 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
第三节--定义一个类
2006/11/16 PHP
PHP 变量类型的强制转换
2009/10/23 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
php+ajax导入大数据时产生的问题处理
2014/06/11 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
nginx下安装php7+php5
2016/07/31 PHP
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
2017/09/07 jQuery
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
2018/08/24 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
webpack中如何使用雪碧图的示例代码
2018/11/11 Javascript
react native 仿微信聊天室实例代码
2019/09/17 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
2020/07/28 Javascript
Python深入学习之对象的属性
2014/08/31 Python
详解Python的Django框架中的通用视图
2015/05/04 Python
Python定时执行之Timer用法示例
2015/05/27 Python
python机器人行走步数问题的解决
2018/01/29 Python
python调用虹软2.0第三版的具体使用
2019/02/22 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
详解django中Template语言
2020/02/22 Python
python网络编程之五子棋游戏
2020/05/14 Python
世界上最大的二手相机店:KEN
2017/05/17 全球购物
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
事业单位辞职信范文
2014/01/19 职场文书
乡村文明行动实施方案
2014/03/29 职场文书
转让协议书范本
2014/09/13 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书