解决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实现调用另一个路径下py文件中的函数方法总结
Jun 07 Python
python 3.3 下载固定链接文件并保存的方法
Dec 18 Python
谈一谈基于python的面向对象编程基础
May 21 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 Python
使用pytorch实现可视化中间层的结果
Dec 30 Python
python将音频进行变速的操作方法
Apr 08 Python
深入理解Python 多线程
Jun 16 Python
Python 操作SQLite数据库的示例
Oct 16 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 Python
python tkinter实现定时关机
Apr 21 Python
一小时学会TensorFlow2之基本操作2实例代码
Sep 04 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
2006/12/14 PHP
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
laravel withCount 统计关联数量的方法
2019/10/10 PHP
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
javascript实现获取cookie过期时间的变通方法
2014/08/14 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
vue实现绑定事件的方法实例代码详解
2019/06/20 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
跟老齐学Python之正规地说一句话
2014/09/28 Python
Djang中静态文件配置方法
2015/07/30 Python
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
python2.7的编码问题与解决方法
2016/10/04 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
Python基于traceback模块获取异常信息
2020/07/23 Python
简单html5代码获取地理位置
2014/03/31 HTML / CSS
中科前程Java笔试题
2016/11/20 面试题
致裁判员加油稿
2014/02/08 职场文书
研究生求职自荐书
2014/06/23 职场文书
银行给客户的感谢信
2015/01/23 职场文书
九寨沟导游词
2015/02/02 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
技术入股合作协议书
2016/03/21 职场文书
Android Studio 计算器开发
2022/05/20 Java/Android