正则表达式

  • 行定位符
  • 元字符
  • 限定符
  • 字符类
  • 排除字符
  • 选择字符
  • 转义字符
  • 分组
  • 在 Python 中使用正则表达式语法

行定位符

行定位符就是用来描述子串的边界。
^” 表示行的开始;
$” 表示行的结尾。

^tm

该表达式表示要匹配子串 tm 的开始位置是行头,如 “tm equal Tommorrow Moon”,而 “Tommorrow Moon equal tm” 则不匹配。但如果使用:

tm$

该表达式可以匹配。如果要匹配的子串可以出现在字符串的任意部分,那么可以直接写成:

tm

元字符

除了 “^” 和 “$” 外,正则表达式里还有更多的元字符,例如下面的正则表达式应用了元字符 “\b” 和 “\w”。

\bmr\w*\b

上面的正则表达式用于匹配以字母 mr 开头的单词,先是从某个单词开始处(\b),然后匹配字母 mr,接着是任意数量的字母或数字(\w*),最后是单词结束处(\b)。该表达式可以匹配 “mrsoft” “mrbook” 和 “mr123456” 等等,但不能与 “amr” 匹配。
常用元字符的说明看下表:

代码 说明
. 匹配除换行符意外的任意字符
\w 匹配字母、数字、下划线或汉字
\W 匹配除字母、数字、下划线意外的字母
\s 匹配单个的空白符(包括键和换行符)
\S 除单个空白字符(包括键和换行符)意外的所有字符
\d 匹配数字
\b 匹配单词的开始或结束,单词的分界符通常是空格、标点符号或换行
^ 匹配字符串的开始
$ 匹配字符串的结束

限定符

上面的例子中,使用 (\w*) 匹配任意数量的字母或数字。如果想匹配特定数量的数字,可以用限定符(指定数量的字符)来实现。如匹配8位QQ号可用如下表达式:

^\d{8}$

常用限定符

限定符 说明 举例
匹配前面的字符0次或1次 colou?r,可以匹配 color 或 color 两种情况
+ 匹配前面的字符1次或多次 go+gle,可以匹配的范围从 google 到 goo···gle
* 匹配前面的字符0次或多次 go*gle,可以匹配的范围从 ggle 到 goo···gle
{n} 匹配前面的字符 n 次 go{2}gle,只匹配 google
{n,} 匹配前面的字符最少 n 次 go{2,}gle,可以匹配从 google 到 goo···gle
{n,m} 匹配前面的字符最少n次,最多m次 employe{0,2} 匹配 employ、employe、employee 三种情况

字符类

正则表达式查找数字和字母很简单,因为已经有了对应这些字符集合的元字符(如"\d","\w")。如果要匹配没有预定义字符的字符集合(比如元音字母a,e,i,o,u),只需要在方括号里列出它们就行了。
[aeiou] 匹配任何一个英文元音字母,[.?!] 匹配标点符号(“.” 或 “?” 或 “!”)。
可以指定一个字符范围,[0-9] 代表的含义与 “\d” 完全一致:一位数字。
[a-z0-9A-Z] 等同于 “\w”(如果只考虑英文的话)。

要想匹配给定字符串中任意一个汉字,可以使用:

[\u4e00-\u9fa5]

如果要匹配连续多个汉字,可以使用:

[\u4e00-\u9fa5]+

排除字符

上一节列出的是匹配复合指定字符集合的字符串。现在反过来,匹配不符合指定字符集合的字符串。可以利用 “^” 字符,这个元字符表示行的开始,而放到方括号里,就是表示排除的意思。

下面表达式用于匹配一个不是字母的字符:

[^a-zA-z]

选择字符

试想一下,如何匹配身份证号码?首先需要了解一下身份证号码的规则。身份证号码长度为15位或18位。如果为15位时,全为数字;如果为18位时,则前17位为数字,最后一位是校验位,可能为数字或字符X。
上面的描述中,包含着条件选择的逻辑,这就需要使用选择字符(|)来实现。改字符可以理解为“或”,匹配身份证的表达式可以写成如下:

(^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$

该表达式的意思是匹配15位数字,或者18位数字,或者17位数字和最后一位(最后一位可以是数字或者是X 或者是x)。


转义字符

正则表达式中的转义字符(\)和 Python 中的大同小异,都是将特殊字符(如“.” “?” “\” 等)变为普通的字符。举一个IP地址的实例,用正则表达式匹配诸如“127.0.0.1” 这样格式的IP地址。如果直接使用点字符,格式为:

[1-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}

这个是错误的!!!

因为 “.” 可以匹配一个任意字符,有它自己含义。如果我们想使用 “.” ,需要使用转义字符(\)。修改后正确的正则表达式为:

[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

分组

小括号字符的第一个作用是可以改变限定符的作用范围,如“|”,“*”,“^” 等。例如下面的表达式中包含小括号:

(six|four)th

这个表达式的意思是匹配单词 sixth 或 fourth,如果不适用小括号,那么就变成了匹配单词 six 和 fourth 了。

小括号的第二个作用是分组,也就是子表达式。例如:

(\.[0-9]{1,3}){3}

这个表达式的作用是对分组 (\.[0-9]{1,3}) 进行重复操作。


在 Python 中使用正则表达式语法

在 Python 中使用正则表达式时,是将其作为模式字符串使用的。例如,将匹配不是字母的一个字符的正则表达式表示为模式字符串,可以使用下面的代码:

'[^a-zA-Z]'

而如果将匹配以字母 m 开头的单词的正则表达式转为模式字符串,则不能直接在其两侧添加引号定界符,例如,下面的代码是不正确的:

'\bm\w*\b'

需要将其中的 “\” 进行转义,正确的表达式为:

'\\bm\\w*\\b'

由于模式字符串中可能包括大量的特殊字符和反斜杠,所以需要写为原生字符串即在模式字符串前加 r 或 R。例如上面的模式字符串采用原生字符串表示就是:

r'\bm\w*\b'

:在编写模式字符串时,并不是所有的反斜杠都需要进行转义,例如,“^\d{8}$” 中的反斜杠就不需要转义,因为其中的 “\d” 没有特殊意义。

【Python笔记】正则表达式相关推荐

  1. Python笔记——正则表达式

    正则表达式 动机 文本处理已经成为计算机常见工作之一 对文本内容的搜索,定位,提取是逻辑比较复杂的工作 为了快速方便的解决上述问题,产生了正则表达式技术 简介 定义 即文本的高级匹配模式,提供搜索,替 ...

  2. Python笔记---常用正则表达式练习

    Python笔记---正则表达式 1. \d :匹配一个数字字符.等价于 [0-9]. 2. \D:匹配一个非数字字符.等价于 [^0-9]. 3. \[ ] 4. \- 5. { }: 6. \* ...

  3. Python入门基础总结笔记——正则表达式

    Python入门基础总结笔记--正则表达式 完整基础知识参看网站:正则表达式 总结重点 用\d可以匹配一个数字,\w可以匹配一个字母或数字 用*表示任意个字符(包括0个),用+表示至少一个字符 用?表 ...

  4. python学习笔记 正则表达式 详解2

    python学习笔记 正则表达式 详解 行定位符 行定位符就是用来描述子串的边界."^"表示行的开始:"$"表示行的结尾 ^tm:匹配以子串tm的开始位置是行头 ...

  5. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  6. python自主学习——正则表达式

    正则表达式 !!!个人主页:个人主页 !!!推荐一款模拟面试.刷题神器,从基础到大厂面试题:点击此处进入牛客网注册学习吧 !!!今日的努力,明日的未来 正则表达式的两个概念: 源字符串:需要匹配的对象 ...

  7. Python笔记【 飞桨、百度领航团 、零基础Python】2021-02-08

    Python笔记[ 飞桨.百度领航团 .零基础Python]2021-02-08 课程链接:https://aistudio.baidu.com/aistudio/course/introduce/7 ...

  8. 用Python学习正则表达式

    转自:http://daydayup.is-programmer.com/posts/1200.html 用Python学习正则表达式 正则表达式 一般字符 []表示的字符类 {}表示重复 ^和$表示 ...

  9. Python中正则表达式用法 重点格式以这个为准_首看_各种问题

    20210811 https://www.jb51.net/article/101258.htm 一.惰性模式的概念: 此模式和贪婪模式恰好相反,它尽可能少的匹配字符以满足正则表达式即可,例如: va ...

  10. python使用正则表达式判别字符串是否以一个大写字符起始而跟随了一些小写字符

    python使用正则表达式判别字符串是否以一个大写字符起始而跟随了一些小写字符 # # Python3 code to find sequences of one upper # case lette ...

最新文章

  1. SpringBoot 注解方式快速整合Mybatis
  2. 计算机应用基础上机操作,计算机应用基础上机操作试题
  3. How many ways HDU - 1978(记忆化搜索关于求多少种方式模板)
  4. jQuery中的选择器引擎Sizzle
  5. linux的帮助命令有,Linux帮助命令有哪些
  6. 一、基础篇--1.1Java基础-包装类的装箱和拆箱
  7. 每日算法系列【LeetCode 1186】删除一次得到子数组最大和
  8. 如何编写兼容各主流邮箱的HTML邮件
  9. Faster RCNN (pytorch)(转载)
  10. BC26 OpenCPU System API接口
  11. python 会议室预约系统解决方案_快思聪FUSION会议预约系统
  12. 通过QQ 2012 客户端协议获取clientkey的0x91数据包分析
  13. 武汉大学计算机学院2018夏令营,武汉大学
  14. 企业文化与“酱油党”
  15. 保护眼睛,绿豆沙颜色的RGB值和HSL值
  16. (48)性能测试——聚合报告
  17. wx.showModal(模态框)的相关设置
  18. python脚本来控制securecrt_SecureCRT 使用python脚本
  19. 跳槽没有20%以上的加薪就等于降薪?我:跳槽还降薪~
  20. iOS开发人员:事实上你还有非常多东西须要学

热门文章

  1. 为什么越有钱的人越轻松
  2. 软路由VS高性能路由,该怎么选择?
  3. vue 侦听器侦听对象属性_SQL Server始终处于侦听器状态
  4. 简单快速部署nexus3私服
  5. 通过select下拉框里的value控制div显示与隐藏
  6. [数据分析工具] Pandas 不可不知的功能(一)
  7. Bootstrap+angularjs+MVC3+分页技术+角色权限验证系统
  8. Intel HEX文件解析
  9. cloud源码-eureka
  10. 利用java导入导出excel到oracle数据库