最近深入研读了正则表达式的一本经典著作,对于在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中正则表达式的反斜线的转义功能相关推荐

  1. python中index函数_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

  2. python socket自动重连_详解python3中socket套接字的编码问题解决

    一.TCP 1.tcp服务器创建 #创建服务器 from socket import * from time import ctime #导入ctime HOST = '' #任意主机 PORT = ...

  3. python函数的使用场景_详解python中strip函数的使用场景

    python strip()函数 介绍,需要的朋友可以参考一下 函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除序列的字符 s.l ...

  4. python中squeeze函数_详解pytorch中squeeze()和unsqueeze()函数介绍

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  5. python中延时函数_详解python中实现延时回调普通函数

    这篇文章主要给大家介绍了关于python中实现延时回调普通函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. 前言 ...

  6. python中byte类型_详解python string类型 bytes类型 bytearray类型

    搜索热词 一.python3对文本和二进制数据做了区分.文本是Unicode编码,str类型,用于显示.二进制类型是bytes类型,用于存储和传输.bytes是byte的序列,而str是unicode ...

  7. python中setattr用法_详解Python的hasattr() getattr() setattr() 函数使用方法

    hasattr(object, name) 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False. 需要注意的是name要用括号括起来 ...

  8. 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成

    详解Python基础random模块随机数的生成 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  详解Python基础random模块随机数的生成.txt ] ( ...

  9. python命令提示符窗口在哪里_详解python命令提示符窗口下如何运行python脚本

    以arcgispro的python脚本为例在arcgispro自带的python窗口下运行python脚本 需求: 将arcgispro的.aprx项目包中gdb的数据源路径更换为sde数据源路径. ...

最新文章

  1. org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInput........
  2. SQL_Server_2005_日期和时间函数(描述及实例)
  3. C#调用C++dll
  4. Python—Mysql—Dbvisualizer
  5. ANSYS CFX 脚本详细设置,实现循环计算
  6. 【渝粤教育】 国家开放大学2020年春季 2716动物营养基础 参考试题
  7. NOIP模拟测试29「爬山·学数数·七十和十七」
  8. python/进程线程的总结
  9. 锋利的JQuery —— 事件和动画
  10. c语言文件操作——复制文件
  11. myBatis --(3)数据的增删改查
  12. 多个Excel合并为一个Excel表
  13. 某度文库付费文档下载,实测可用~
  14. cocos android 热更新,Cocos creator 大厅子游戏和热更新
  15. Qt学习之QDir的使用(使用QDir创建文件夹)
  16. vs 发生错误,需要终止调试... HRESULT=0x8000ffff。ErrorCode=0x0 解决办法
  17. Heli Track
  18. mysql从创库到查询基本命令
  19. secureCRT命令行字符重叠只显示一半
  20. 云脉档案管理系统助力档案信息化建设

热门文章

  1. buuctf [GKCTF 2021]你知道apng吗 <apng图片格式的考察>
  2. python函数教程:global 和 nonlocal的详细用法
  3. Python动态绑定属性和方法
  4. 2020年电大c语言程序设计作业1答案,2019年最新电大C语言程序设计作业答案.doc
  5. socket 中 SOCK_STREAM 和 SOCK_DGRAM的区别?
  6. opencv C++ 三重for循环遍历RGB图像像素(逐像素操作、操作像素值、遍历像素遍历)at<typename>(i,j)、灰度图at<uchar>、at<Vec3b>、at<Vec3F>
  7. 【正则化】csdn markdown python 批量给文本行行头添加“•”符号,“- ”(实心圆)
  8. windows下如何查看设备的idVendor(厂商标识)和idProduct(产品标识)?
  9. python os.popen()方法(用于从一个命令打开一个管道)
  10. linux——shell 中的变量