python正则表达式中的转义字符_详解python中正则表达式的反斜线的转义功能
最近深入研读了正则表达式的一本经典著作,对于在python中使用正则表达式时使用反斜线转义功能时有些心得,特与大家分享。
核心思想:在python中使用正则表达式时要切记反斜线具有两层转义功能,如果你要匹配一个反斜线本身时要注意它必须被转义两次。(除非你使用原始字符串,就是字符串前面加r)
我们先来看一个例子:
import re
a = re.match('\\\','\\')
File "", line 2
a = re.match('\\\','\\')
^
SyntaxError: unexpected character after line continuation character
上面这个例子本身就不合语法要求,那么为什么呢? 首先在
python中,因为正则表达式本身是一个字符串,所以它要遵守字符串的规则——反斜线表示转义符
而在正则表达式中反斜线又是一个具有转义功能的元字符,所以反斜线具备了双重转义功能
回到例子中,第一个转义了第二个,此时第二个去除了字符串转义符的身份,但是它还有正则表达式转义元字符的身份
也就是说第二个仍然具备转义功能,那么它转义谁呢?它只能转义第三个,可是第三个它具备两层身份(字符串的转义符和正则表达式的转义元字符)
所以现在有两种可能情况发生:
第一种,第二个无法转义第三个,因为身份不符,一个是正则表达式转义元字符,另一个是字符串转义符
第二种,第二个转义了第三个,但是这种转义也仅仅是去除了一层身份,但是它还有一层身分(转义元字符)结果就是第三个仍然具有转义功能。
总之不管这时发生了哪种情况,第三个最终结果就是仍然具备转义功能,他会转义它后面的单引号,使得整段代码语法错误。
所以正确的写法是再添加一个反斜线,四个反斜线,两两转义之后最终转义成匹配单独一个反斜线的功能
import re
a = re.match('\\\\','\\')
print(a)
#显示的结果match='\\',之所以显示两个反斜线是因为语法规定一个反斜线无法显示(\是转义符)
<_sre.SRE_Match object; span=(0, 1), match='\\'>
当然也可以使用原始字符串的方法,在字符串前面加r,这时里面的反斜线就失去字符串转义符的功能了,本文主要讨论实质原理,不是方法
import re
a = re.match(r'\\','\\')
print(a)
<_sre.SRE_Match object; span=(0, 1), match='\\'>
python正则表达式中的转义字符_详解python中正则表达式的反斜线的转义功能相关推荐
- python中index函数_详解python中的index函数用法
1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...
- python socket自动重连_详解python3中socket套接字的编码问题解决
一.TCP 1.tcp服务器创建 #创建服务器 from socket import * from time import ctime #导入ctime HOST = '' #任意主机 PORT = ...
- python函数的使用场景_详解python中strip函数的使用场景
python strip()函数 介绍,需要的朋友可以参考一下 函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除序列的字符 s.l ...
- python中squeeze函数_详解pytorch中squeeze()和unsqueeze()函数介绍
squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...
- python中延时函数_详解python中实现延时回调普通函数
这篇文章主要给大家介绍了关于python中实现延时回调普通函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. 前言 ...
- python中byte类型_详解python string类型 bytes类型 bytearray类型
搜索热词 一.python3对文本和二进制数据做了区分.文本是Unicode编码,str类型,用于显示.二进制类型是bytes类型,用于存储和传输.bytes是byte的序列,而str是unicode ...
- python中setattr用法_详解Python的hasattr() getattr() setattr() 函数使用方法
hasattr(object, name) 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False. 需要注意的是name要用括号括起来 ...
- 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成
详解Python基础random模块随机数的生成 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 详解Python基础random模块随机数的生成.txt ] ( ...
- python命令提示符窗口在哪里_详解python命令提示符窗口下如何运行python脚本
以arcgispro的python脚本为例在arcgispro自带的python窗口下运行python脚本 需求: 将arcgispro的.aprx项目包中gdb的数据源路径更换为sde数据源路径. ...
最新文章
- org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInput........
- SQL_Server_2005_日期和时间函数(描述及实例)
- C#调用C++dll
- Python—Mysql—Dbvisualizer
- ANSYS CFX 脚本详细设置,实现循环计算
- 【渝粤教育】 国家开放大学2020年春季 2716动物营养基础 参考试题
- NOIP模拟测试29「爬山·学数数·七十和十七」
- python/进程线程的总结
- 锋利的JQuery —— 事件和动画
- c语言文件操作——复制文件
- myBatis --(3)数据的增删改查
- 多个Excel合并为一个Excel表
- 某度文库付费文档下载,实测可用~
- cocos android 热更新,Cocos creator 大厅子游戏和热更新
- Qt学习之QDir的使用(使用QDir创建文件夹)
- vs 发生错误,需要终止调试... HRESULT=0x8000ffff。ErrorCode=0x0 解决办法
- Heli Track
- mysql从创库到查询基本命令
- secureCRT命令行字符重叠只显示一半
- 云脉档案管理系统助力档案信息化建设
热门文章
- buuctf [GKCTF 2021]你知道apng吗 <apng图片格式的考察>
- python函数教程:global 和 nonlocal的详细用法
- Python动态绑定属性和方法
- 2020年电大c语言程序设计作业1答案,2019年最新电大C语言程序设计作业答案.doc
- socket 中 SOCK_STREAM 和 SOCK_DGRAM的区别?
- opencv C++ 三重for循环遍历RGB图像像素(逐像素操作、操作像素值、遍历像素遍历)at<typename>(i,j)、灰度图at<uchar>、at<Vec3b>、at<Vec3F>
- 【正则化】csdn markdown python 批量给文本行行头添加“•”符号,“- ”(实心圆)
- windows下如何查看设备的idVendor(厂商标识)和idProduct(产品标识)?
- python os.popen()方法(用于从一个命令打开一个管道)
- linux——shell 中的变量