解决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设置检查点简单实现代码
Jul 01 Python
Python实现爬取逐浪小说的方法
Jul 07 Python
python中set()函数简介及实例解析
Jan 09 Python
详解python之协程gevent模块
Jun 14 Python
Python多进程入门、分布式进程数据共享实例详解
Jun 03 Python
Python 使用list和tuple+条件判断详解
Jul 30 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 Python
Python中xml和dict格式转换的示例代码
Nov 07 Python
python 画图 图例自由定义方式
Apr 17 Python
Python爬虫之Selenium实现关闭浏览器
Dec 04 Python
Python实现PS滤镜中的USM锐化效果
Dec 04 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
Jan 28 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/10/09 PHP
建立文件交换功能的脚本(一)
2006/10/09 PHP
一个简洁的多级别论坛
2006/10/09 PHP
Win7下手动安装apache2.2、php5.4笔记
2015/04/03 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
javascript hashtable 修正版 下载
2010/12/30 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
js验证密码强度解析
2020/03/18 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
python多线程同步实例教程
2019/08/11 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
在python中利用try..except来代替if..else的用法
2019/12/19 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
Python with语句用法原理详解
2020/07/03 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
EJB3.1都有哪些改进
2012/11/17 面试题
yy司仪主持词
2014/03/22 职场文书
感恩主题班会教案
2015/08/12 职场文书
详解Nginx 工作原理
2021/03/31 Servers
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL
Python字符串格式化方式
2022/04/07 Python