正则表达式的三步走:

Python字符串的转义   --》   正则表达式转义  --》 内容与转义后原始字符串内容进行匹配

import rere.search('\\t','\t').group()  #>>'\t'

1.'\\t' python字符串转义为正则表达式  \t

2.正则表达式解释 \t 为一个制表符

3.python字符串内容'\t' 转义为原始字符串  即一个制表符

4.正则表达式 与 原始(正常)字符串匹配

明确两个概念 python字符串 和 原始的字符串

原始字符串  我就想表达一个反斜杠后面加英文 即 \abc

python字符串  想表示\原始的意义需要加一个转义字符 即变成'\\abc'

正则表达式 与 原始字符串 进行匹配

例:

import repureStr = re.search('\\\\abc','\\abc').group()  #>>'\\abc'  print(pureStr)  #>>\abc

1.pyhon字符串'\\\\abc' --》 正则表达式\\abc  匹配字符串  \abc

2.python字符串'\\abc' --》 原始字符串 \abc

3.匹配字符串  与 原始字符串 一致因而能够匹配上

特殊符号的匹配

例:

1.import rere.search('\\~','\~').group()  #>>'~'  print(re.search('\\~','\~').group())  #>>~re.search('\\~','\~').span()  #>>(1,2)2.import rere.search('\\\\~','\~').group()  #>>'\\~'  print(re.search('\\\\~','\~').group())  #>>\~3.import rere.search('\\\\\\~','\\~').group()  #>>'\\~'  print(re.search('\\\\\\~','\\~').group())  #>>\~4.import rere.search('\\\\~','\\~').group()  #>>'\\~'  print(re.search('\\\\~','\\~').group())  #>>\~5.import rere.search('\\\\\\\\~','\\\\~').group()  #>>'\\\\~'  print(re.search('\\\\\\\\~','\\\\~').group())  #>>\\~

为什么会有这种情况?

1号工作流程

1.python字符串'\\~'  --》 正则表达式\~  匹配字符串~

从这里我们可以看出正则表达式将  \特殊字符  都直接解释为该特殊字符

正则表达式 \#  匹配字符串  #    正则表达式 \=  匹配字符串 =

2.python字符串'\~' --》 原始字符串 \~

理解为什么原始字符串是\~ 而不是 ~

因为从span()方法可以看出是从母串的第二个字符匹配上的,如果python字符串'\~' 转换为原始字符串为~,那返回值应该是(0,1),从而也知道python字符串并不会转义~,但正则表达式会

3.匹配字符串  与 原始字符串  去进行匹配

2号

理解为什么group()返回的python字符串是'\\~'

因为若原始字符串是 \~  所对应的python字符串就应该为 '\\~'

写为'\~'  不会报错因为python字符串并不会转义~,它知道你想表达的原始字符串为\~,为使得正确表达在底层实际上帮你补了一个'\',因而'\~' 实际上其实是'\\~'

这样整个工作流程也就好理解了

1.python字符串'\\\\~' --》 正则表达式 \\~  匹配字符串 \~

2.python字符串'\~' --》  原始字符串\~

3.进行匹配

3号工作流程

1.python字符串'\\\\\\~' --》 正则表达式 \\\~ 匹配字符串 \~  (注:\\匹配\  \~匹配~)

2.python字符串'\\~' --》  原始字符串\~

3.进行匹配

4号工作流程

1.python字符串'\\\\~' --》 正则表达式 \\~  匹配字符串 \~

2.python字符串'\\~' --》  原始字符串\~

3.进行匹配

5号工作流程

1.python字符串'\\\\\\\\~' --》 正则表达式 \\\\~  匹配字符串 \\~

2.python字符串'\\\\~' --》  原始字符串\\~

3.进行匹配

转义字符的匹配

例:

1.import rere.search('\n','\n').group()    #>>'\n'print(re.search('\n','\n').group())2.import rere.search('\\n','\n').group()  #>>'\n'print(re.search('\\n','\n').group())3.import rere.search('\\n','\\n').group()   #报错print(re.search('\\n','\\n').group())

为什么1和2结果一样,3却报错

模拟1.流程:

1.python字符串'\n' --》正则表达式 一个换行符  匹配一个换行符

怎么理解:假设python字符串为'a'  --》正则表达式  a  (即一个固定a字符,这里a和换行符一个概念,都是固定字符)  因此正则表达式 a 匹配字符串 a      同理正则表达式 换行符  匹配字符串换行符

2.python字符串'\n' --》 原始字符串 一个换行符

3.进行匹配

模拟2.流程:

1.python字符串'\\n' --》正则表达式 \n  匹配字符串 一个换行符

2.python字符串'\n' --》 原始字符串 一个换行符

3.进行匹配

模拟3.流程:

1.python字符串'\\n' --》正则表达式 \n  匹配字符串 一个换行符

2.python字符串'\\n' --》 原始字符串 \n

3.换行符 与 \n 不匹配  换行符等价于字符a是一个字符,而原始字符串\n 是两个字符

总结:

说了这么多,总算把这几个概念理清楚了。

在实际运用中,还是直接 r'' 来就好了,这样就没有python字符串转义这一中间过程了

例:想匹配字符串 \sub

import rere.search(r'\\sub',r'\this is a sample \subsription').group()  #>>'\\sub'print(re.search(r'\\sub',r'\this is a sample \subsription').group()) #>>\sub

正则表达式匹配的理解相关推荐

  1. 正则表达式匹配不包含特定字符串解决匹配溢出问题

    匹配溢出问题在正则表达式当中算是比较常见的问题,它常常导致我们匹配结果莫名其妙的出错,本文专门为你讲解如何通过匹配不包含特定字符串的方法来解决这类问题. 那么,什么是匹配溢出呢? 下面我们来看个例子: ...

  2. 算法:正则表达式匹配

    题目: 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该覆盖整个字符串 (s) ...

  3. LeetCode精讲题 10正则表达式匹配(动态规划)

    标题 题目描述 递归(超时) 动态规划 结语 题目描述 先点赞再观看.帅哥靓女养成好习惯. 10 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和'*'的正则表达 ...

  4. 力扣- -正则表达式匹配

    力扣- -正则表达式匹配 文章目录 力扣- -正则表达式匹配 一.题目描述 二.分析 方法一:Dp函数 明确状态和选择 确定状态转译方程 确定base case 完整代码 方法二:Dp table 明 ...

  5. php 前置匹配,浅析PHP正则表达式匹配的特定实现

    PHP正则表达式匹配的特定实现是什么呢?其实我们知道,在实际的匹配操作的过程中我们操作的不仅仅是单个的字母或是数字,那么我们面对像单词的或是一组数字的时候该如何处理呢? PHP正则表达式匹配的特定实现 ...

  6. 【重点 递归 动态规划 正则表达式匹配】LeetCode 10. Regular Expression Matching

    LeetCode 10. Regular Expression Matching 本博客参考:http://www.cnblogs.com/grandyang/p/4461713.html 详细解析见 ...

  7. 学习正则表达式 - 匹配 Unicode 和其他字符

    目录 一.匹配 Unicode 字符 1. 匹配 emoji 符号 (1)确定 emoji 符号的 Unicode 范围 (2)emoji 符号的存储 (3)正则表达式匹配 2. 匹配中文 (1)确定 ...

  8. 【LeetCode】正则表达式匹配

    https://www.imooc.com/article/281353?block_id=tuijian_wz [LeetCode]正则表达式匹配 2019.03.04 19:53 598浏览 题目 ...

  9. python编辑距离正则匹配_(C/C++学习)33.编辑距离和正则表达式匹配分析

    说明:本文主要分析关于力扣 10 题(正则表达式匹配) 和 力扣 72 题(编辑距离) 的状态方程问题(主要便于自己理解) 1.关于编辑距离的状态方程: a. 首先 DP[i][j] 为字符串 1 的 ...

最新文章

  1. The Innovation | Volume 2 Issue 4 正式出版
  2. C# WPF 中用代码模拟鼠标和键盘的操作
  3. springboot 自动配置
  4. java员工请假系统_基于jsp的员工请假管理系统-JavaEE实现员工请假管理系统 - java项目源码...
  5. 在html中用js代替${pagecontext.request.getcontextpath}这样就不用使用jsp了
  6. 一文详解CSS常见的五大布局
  7. 【转】VS工具:实时可视化树
  8. python写进程_将数据作为后台进程在Python中写入磁盘
  9. Yarn调度器和调度算法(FIFO、容量调度器 与 公平调度器)
  10. Java入门到月入2W+ IT各种技术教学资料分享
  11. python tuple
  12. python中返回上一步操作的代码_【代码学习】PYTHON字符串的常见操作
  13. 读“产品经理那些事儿”有感
  14. 练习题 - 基于快速文本标题匹配的知识问答实现(一,基础篇)
  15. 关于setInterval和setTImeout中的this指向问题
  16. Python 作为小程序后端的三种方法
  17. java完全参考手册
  18. 移动机械硬盘测试软件,硬盘检测工具HDTune使用教程
  19. FTP软件的安装及上传/下载方法
  20. 无涯教程: Laravel 8 - Excel和CSV介绍

热门文章

  1. 汤森路透 Thomson Reuters--使用多模型数据库ArangoDB 打造快速安全的简单视图分析...
  2. 怎么样设置网站访问权限
  3. 什么是4D(DRG、DLG、DOM、DEM)数据?(转自gisriver的空间)
  4. 史上最全 前端开发面试问题及答案整理 http://segmentfault.com/blog/trigkit4/1190000002562454
  5. 南邮 ctf web之综合题
  6. 计算机视觉(CV)领域的公司
  7. uniapp里自定义底部导航
  8. 想你所想,华为云桌面Workspace助你轻松办公
  9. 【3D服装级设计/游戏动画引擎】Marvelous Designer软件
  10. SwiftUI中如何使用App Tracking Transparency Framework