正则表达式匹配的理解
正则表达式的三步走:
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
正则表达式匹配的理解相关推荐
- 正则表达式匹配不包含特定字符串解决匹配溢出问题
匹配溢出问题在正则表达式当中算是比较常见的问题,它常常导致我们匹配结果莫名其妙的出错,本文专门为你讲解如何通过匹配不包含特定字符串的方法来解决这类问题. 那么,什么是匹配溢出呢? 下面我们来看个例子: ...
- 算法:正则表达式匹配
题目: 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该覆盖整个字符串 (s) ...
- LeetCode精讲题 10正则表达式匹配(动态规划)
标题 题目描述 递归(超时) 动态规划 结语 题目描述 先点赞再观看.帅哥靓女养成好习惯. 10 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和'*'的正则表达 ...
- 力扣- -正则表达式匹配
力扣- -正则表达式匹配 文章目录 力扣- -正则表达式匹配 一.题目描述 二.分析 方法一:Dp函数 明确状态和选择 确定状态转译方程 确定base case 完整代码 方法二:Dp table 明 ...
- php 前置匹配,浅析PHP正则表达式匹配的特定实现
PHP正则表达式匹配的特定实现是什么呢?其实我们知道,在实际的匹配操作的过程中我们操作的不仅仅是单个的字母或是数字,那么我们面对像单词的或是一组数字的时候该如何处理呢? PHP正则表达式匹配的特定实现 ...
- 【重点 递归 动态规划 正则表达式匹配】LeetCode 10. Regular Expression Matching
LeetCode 10. Regular Expression Matching 本博客参考:http://www.cnblogs.com/grandyang/p/4461713.html 详细解析见 ...
- 学习正则表达式 - 匹配 Unicode 和其他字符
目录 一.匹配 Unicode 字符 1. 匹配 emoji 符号 (1)确定 emoji 符号的 Unicode 范围 (2)emoji 符号的存储 (3)正则表达式匹配 2. 匹配中文 (1)确定 ...
- 【LeetCode】正则表达式匹配
https://www.imooc.com/article/281353?block_id=tuijian_wz [LeetCode]正则表达式匹配 2019.03.04 19:53 598浏览 题目 ...
- python编辑距离正则匹配_(C/C++学习)33.编辑距离和正则表达式匹配分析
说明:本文主要分析关于力扣 10 题(正则表达式匹配) 和 力扣 72 题(编辑距离) 的状态方程问题(主要便于自己理解) 1.关于编辑距离的状态方程: a. 首先 DP[i][j] 为字符串 1 的 ...
最新文章
- 薛定谔的猫跳进了生物学界,化学家表示:没有我可能办不到
- asp.net core上使用redis探索(1)
- python脚本例子_python dict 字典 以及 赋值 引用的一些实例(详解)
- 计算机类学生发专利,关于统计2020年老师指导本科生发表科研论文数和申请专利数的通知...
- apollo java客户端_携程配置中心Apollo的Java客户端API的使用
- 创建hugo博客_Hugo + Firebase:如何在几分钟内免费创建自己的静态网站
- php 正则mysql语句_MySQL正则表达式搜索 - mysql数据库栏目 - 自学php
- 6位顺序号生成_分布式id生成策略,我和面试官扯了一个半小时
- LeetCode 109. 有序链表转换二叉搜索树
- 海康sdk java_java调用海康sdk案例
- 在ArcMap中制作Python加载项点击小班依次编号
- 去掉最高分和最低分的平均分trimmean,计算频率最高的那个数即众数mode.sngl,判断数据是否重复
- 前端 vue + element + vux
- Sidetree协议
- 520 钻石争霸赛 2021 7-8 浪漫侧影 (25 分)
- 饭卡管理的C语言实现
- 打字效果短视频是怎么做出来的?
- Ghost恢复后Windows 7无法启动解决
- JAVA 方法定义及调用
- day10-文件操作
热门文章
- 2017年浙江工业大学大学生程序设计迎新赛热身赛-J-Forever97与寄信
- k8s-集群管理系统-KubeSphere2.1.0搭建与测试
- 苏宁易购董事会改选并聘任张近东为名誉董事长;ASSASSINA莎辛那首个香氛沙龙闪现网红玻璃森林 | 知消...
- Tei-Wei Kuo
- CV深度学习项目调试开发过程中报错记录【持续更新】
- NLP经典论文:Word2vec、CBOW、Skip-gram 笔记
- 收藏很久的开关电源书籍
- [转载]Matlab反三角函数表示
- 王兴:淘宝为什么还不支持微信支付?
- java写一个登录系统_用java写一个用户登陆界面