解决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开发的小球完全弹性碰撞游戏代码
Oct 15 Python
Python中AND、OR的一个使用小技巧
Feb 18 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
Jun 27 Python
python读取指定字节长度的文本方法
Aug 27 Python
TensorFlow 读取CSV数据的实例
Feb 05 Python
如何使用python代码操作git代码
Feb 29 Python
基于Python测试程序是否有错误
May 16 Python
keras CNN卷积核可视化,热度图教程
Jun 22 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
Jan 12 Python
Python Pandas知识点之缺失值处理详解
May 11 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
德生PL550的电路分析
2021/03/02 无线电
网站加速 PHP 缓冲的免费实现方法
2006/10/09 PHP
加强版phplib的DB类
2008/03/31 PHP
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
PHP实现货币换算的方法
2014/11/29 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
2013/09/26 Javascript
用js判断输入是否为中文的函数
2014/03/10 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
js继承实现方法详解
2016/12/16 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
webpack常用配置总览(小结)
2019/11/18 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
pytorch: tensor类型的构建与相互转换实例
2018/07/26 Python
django连接mysql配置方法总结(推荐)
2018/08/18 Python
python安装sklearn模块的方法详解
2020/11/28 Python
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
春节联欢会主持词
2014/03/24 职场文书
病媒生物防治方案
2014/05/13 职场文书
员工安全生产责任书
2014/07/22 职场文书
2014年化验员工作总结
2014/11/18 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
人与自然观后感
2015/06/16 职场文书
php去除数组中为0的元素的实例分析
2021/11/17 PHP