19. 正则表达式(二)
1. 正则表达式的应用场景
1.1 重复匹配
- 有时候我们需要对某个字段进行重复匹配,例如手机号码136 6666 6666,一般新手会写成\d\d\d\d\d\d\d\d,这不是一种恰当的表达方式,写着费劲,看着也不舒服,还不一定表达的恰当
- 这种情况下可以使用表达式加上修饰匹配次数的特殊符号 { },不但重复表达式可以匹配,而且看着舒服,例如[abcd][abcd] 可以写成[abcd]{2}
表达式 | 匹配 |
---|---|
{ n } | 重复n次,比如\d{2},相当于\d\d,a{ 3 }相当于aaa |
{ m, n} | 表达式至少重复m次,最多重复n次,比如ab{1,3}相当于ab,abb,abbb这种 |
{m, } | 表达式至少重复m次,没有最多上限次数 |
? | 表达式匹配0或1次,相当于{ 0,1 },比如a[cd]? 可以匹配a,ac,ad |
+ | 至少出现一次,相当于{1,},比如a+b可以匹配ab,aab,aaab |
* | 表达式出现0到任意次,相当于{ 0, } |
1.2 重复匹配和非贪婪匹配
- 位置匹配
有时候我们对匹配的位置有要求,开始,结束,单词之间等
表达式 | 匹配 |
---|---|
^ | 在字符串开始的地方匹配,符号本身不匹配任何字符 |
$ | 在字符结束的位置匹配,符号本身不匹配任何字符 |
\b | 匹配一个单词边界,就是单词之间空格位置,符号本身不匹配任何字符 |
\B | 匹配非单词边界,左右两边都是\w范围或者左右两边都不是\w范围的字缝 |
- 贪婪和非贪婪模式
在重复匹配的时候,表达式总是默认匹配更多字符,这就叫做贪婪模式。例如针对文本dxxxdxxxd,表达式(d)(\w+)(d)中的\w+将匹配第一个\d和最后一个\d之间所有的字符xxxdxxx.可见\w+匹配的时候尽可能多的匹配到了符合条件的字符。同理带有.*?和{m,n}的重复匹配表达式都是尽可能多的匹配
检验数字的匹配表达式
功能 | 表达式 |
---|---|
数字 | ^ [ 0-9 ] *$ |
n位数的数字 | ^ \d{ n } $ |
至少n位的数字 | ^ \d{n, } $ |
零和非零开头的数字 | ^ ( 0 I [1-9] [0-9].*) $ |
有两位小数的正实数 | ^ [ 0-9 ] +( .[ 0-9 ]{2}) ?$ |
非零负实数 | ^-[1-9]\d*$ |
- 特殊场景表达式
功能 | 表达式 |
---|---|
Email地址 | ^\w + ([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$ |
域名 | [ a-zA-Z0-9][-a-zA-Z0-9]{0, 62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0, 62})+/.? |
手机号码 | ^(13 [0-9] I 14 [ 5 I 7 ] I 15 [0 I 1 I 2 I 3 I 4 I 5 I 6 I 7 I 8 I 9 ] I 18 [ 0 I 1 I 2 I 3 I 4 I 5 I 6 I 7 I 8 I 9])\d{8}$ |
身份证号 | ^\d{ 15 } I \d{18}$(15/18位数) |
2. re模块常用方法
方法 | 描述 | 返回值 |
---|---|---|
compile(pattern[,flags]) | 根据包含正则表达式的字符串创建模式对象 | re对象 |
search(pattern, string[, flags]) | 在字符串中查找 | 第一个匹配到的对象或none |
match(pattern, string[,flags]) | 在字符串开始处匹配模式 | 在字符串开头匹配到的对象或none |
split(pattern,string[, maxsplit=0,flags]) | 根据模式的匹配项来分割字符串 | 分割后的字符串列表 |
findall(pattern,string,flags) | 列出字符串中所有模式的匹配项 | 所有匹配到的字符串列表 |
sub(pat,repl,string[],count=0,flags) | 将字符串中所有pat的匹配项用repl替换 | 完成替换后的新字符串 |
- complie(pattern,flags=0)
这个方法是re模块的工厂法,用于将字符串形式的正则表达式编译成Pattern模式对象,可以实现更加效率的匹配。第二个参数flag是匹配模式 使用complie()完成一次转换后,再次使用该匹配模式时不进行转换。经过转换的正则表达式对象也能使用普通的re方法
flag匹配模式
匹配模式 | 描述 |
---|---|
re.A | Ascll 字符模式 |
re.l | 使匹配对大小写不敏感 |
re.L | 做本地化识别匹配 |
re.M | 多行匹配,影响^ and $ |
re.S | 使.通配符匹配包括换行在内的字符,针对多行匹配 |
re.U | 根据Unicode字符集解析字符,这个标识影响\w,\W,\b,\B |
re.X | 更灵活的方式匹配将正则表达式匹配的更加容易理解 |
- search(pattern,string,flags=0)
在文本内查找,返回第一个匹配到的字符串,返回值类型与匹配方法与match()方法一样,区别是查找的位置不固定在文本的开头 - findall(pattern,string,flags=0)
作为re模块的三⼤搜索函数之⼀,findall()和match()、search()的不同之处在于,前两者都是单值匹配,找到⼀个就忽略后⾯,直接返回不再查找了。⽽findall是全⽂查找,它的返回值是⼀个匹配到的字符串的列表。这个列表没有group()⽅法,没有start、end、span,更不是⼀个匹配对象,仅仅是个列表!如果⼀项都没有匹配到那么返回⼀个空列表 - split(pattern, string, maxsplit=0, flags=0)
re模块的split()⽅法和字符串的split()⽅法很相似,都是利⽤特定的字符去分割字符串。但是re模块的split()可以使⽤正则表达式,因此更灵活,更强⼤。split有个参数maxsplit,⽤于指定分割的次数 - sub(pattern, repl, string, count=0, flags=0)
sub()⽅法类似字符串的replace()⽅法,⽤指定的内容替换匹配到的字符,可以指定替换次数
3. 分组功能
- Python的re模块有一个分组功能,就是去已经匹配的内容里再筛选出需要的内容,相当于二次过滤
- 实现分组靠(),获取分组内容靠group()、groups()
19. 正则表达式(二)相关推荐
- 剑指 Offer 19. 正则表达式匹配 regex_match() regex()
一. 题目: 剑指 Offer 19. 正则表达式匹配 请实现一个函数用来匹配包含'. '和''的正则表达式.模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(含0次).在本题 ...
- python正则表达式面试_【剑指offer】面试题19. 正则表达式匹配
面试题19. 正则表达式匹配 请实现一个函数用来匹配包含'. '和''的正则表达式.模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(含0次).在本题中,匹配是指字符串的所有字 ...
- 【LeetCode】剑指 Offer 19. 正则表达式匹配
[LeetCode]剑指 Offer 19. 正则表达式匹配 文章目录 [LeetCode]剑指 Offer 19. 正则表达式匹配 package offer;public class Soluti ...
- 剑指 Offer 19. 正则表达式匹配
剑指 Offer 19. 正则表达式匹配 https://leetcode-cn.com/problems/zheng-ze-biao-da-shi-pi-pei-lcof/ 请实现一个函数用来匹配包 ...
- JavaScript 19. 正则表达式
JavaScript 19. 正则表达式 文章目录 JavaScript 19. 正则表达式 1. 什么是正则表达式 2. 使用字符串方法 2.1 search() 方法 2.2 replace() ...
- 【LeetCode笔记】剑指Offer 19. 正则表达式匹配(Java、动态规划)
文章目录 题目描述 思路 && 代码 二刷 打卡第十二天- 题目描述 拖了超级久的一道题= =,懒得看正则表达式,但是其实和正则表达式相关的地方也不多 思路 && 代码 ...
- 剑指offe面试题19——正则表达式匹配
题目: 请实现一个函数用来匹配包含'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意多次(含0次).在本题中,匹配是指字符串的所有字符匹配整个模式.例 ...
- 正则表达式二:正则表达式元字符
二.正则表达式元字符 正则表达式由两种基本字符类型组成:普通文本字符和元字符.元字符使正则表达式具有处理能力.所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元 ...
- 剑指offer:面试题19. 正则表达式匹配
题目:正则表达式匹配 请实现一个函数用来匹配包含'. '和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次).在本题中,匹配是指字符串的所有字符匹 ...
- 大有可为的“正则表达式”(二)
5.3. 基本和扩展正则表达式 Unix支持两种的正则表达式的版本: (1)现代版本:扩展正则表达式(extended regular expression,ERE),属于IEEE1003.2标准, ...
最新文章
- 解决IOS ATS禁止HTTP明文传输
- JQuery------各种版本下载
- Ant Design Blazor 发布 0.9.0,共100+人贡献!
- Perl语言编程学习笔记2
- 可视化界面_uniapp通过 HBuilderX 可视化界面构建项目
- ASp.net常用服务
- PHP中利用Ffmpeg获得flv视频缩略图和播放时间
- 莫烦Tensorflow教程(1~14)(转)
- 神经网络加速器设计研究:GoSPA ISCA2021论文研读
- 从Zachman企业架构框架想到的
- 基于pytorch计算ssim和ms-ssim
- 计算机数值换算在线,计算机单位换算(计算机单位换算在线)
- win10-yolov5环境搭建
- 浅谈项目经理的工作职责
- vue使用图像编辑器tui-image-editor
- 【学习记录-R】以U检验为例解释单/双侧检验
- 【 js中通过键盘上下左右移动图片】
- 金升阳:研发领跑 以技术推动市场
- Makefile 经典教程(看完这篇就够了,不信你拉拉进度条)
- 芬兰气象研究所和维萨拉科学测量仪器将用于毅力号火星探测