文章目录

  • 一、正则表达式
    • 1.什么正则表达式
    • 2.正则表达式的语法
      • 1)普通字符 - 表示字符本身
      • 2) - 匹配一个任意字符
      • 3) \w - 匹配任意一个数字、字母或者下划线(针对ASCII码表有效)
      • 4) \d - 匹配任意一个数字字符
      • 5) \s - 匹配任意一个空白字符
      • 6) \D和\S
      • 7) [字符集]
      • 8)[\^字符集] - 取不在字符集中任意一个字符
        • 1)\b - 检测是否是单词的边界
        • 2)^ - 检测^所在的位置是否是字符串开头
        • 3) $ - 检测$所在的位置是否是字符串结尾
          • 1. * - 匹配0次或多次
          • 2. + - 匹配1次或多次(至少1次)
          • 3. ? - 匹配0次或1次
          • 4. {}
        • 4)贪婪和非贪婪
          • a.贪婪:
          • b.非贪婪:
  • 二、分支和分组
    • 1.分支: |
    • 2.分组: ()
      • 1)整体操作
      • 2)重复:
      • 3)捕获
    • 3.转义符号:
  • 一不小心就这么多内容了,先慢慢吸收,明天还有部分的知识(re模块),今天就到这里吧~再见!

有这么个说法:江湖传说中,程序员的正则表达式和医生的处方,道士的鬼符齐名, 曰: 普通人看不懂的三件神器. 这个传说至少向我们透露了两点信息: 一是正则表达式很牛, 能和医生的处方, 道士的鬼符齐名, 并被大家提起, 可见其江湖地位. 二是正则表达式很难, 这也从侧面说明了, 如果你可以熟练的掌握并应用它, 在装X的路上, 你将如日中天 (别问我中天是谁……)

好了!话不多说,进入今天主题。import我们的re模块,开始:

一、正则表达式

re模块:python提供的专门使用正则表达式的相关的函数的模块

1.什么正则表达式

正则表达式是一种让字符串处理更简单的工具(本质是做字符串匹配)

2.正则表达式的语法

fullmatch(正则表达式, 字符串)  - 让正则表达式式和字符串进行完全匹配,如果匹配失败结果是None
js的正则: /正则表达式/
python的正则: r'正则表达式'

1)普通字符 - 表示字符本身

re_str = r'abc'
result = fullmatch(re_str, 'abc')
print(result)

2) - 匹配一个任意字符

re_str = r'.abc'
result = fullmatch(re_str, '+abc')
print(result)

匹配一个长度是5的字符串,字符串中间三个字符是abc,第一个字符和最后一个字符任意

re_str = r'.abc.'
result = fullmatch(re_str, '(abc+')
print(result)

匹配一个长度是3的任意字符串

re_str = r'...'
result = fullmatch(re_str, 'ajs')
print(result)

3) \w - 匹配任意一个数字、字母或者下划线(针对ASCII码表有效)

(注意:平时不用)

re_str = r'\wabc'
result = fullmatch(re_str, '8abc')
print(result)

4) \d - 匹配任意一个数字字符

re_str = r'\d\d\d'
result = fullmatch(re_str, '142')
print(result)re_str = r'\d\dabc\d\d'
result = fullmatch(re_str, '23abc89')
print(result)

5) \s - 匹配任意一个空白字符

re_str = r'\s\d..'
result = fullmatch(re_str, '\n9k/')
print(result)re_str = r'\d\d\s\d\d'
result = fullmatch(re_str, '78 23')
print(result)

6) \D和\S

\字母 - 小写字母和对应的大写字母的功能相反

re_str = r'\dabc\D'
result = fullmatch(re_str, '8abc-')
print(result)re_str = r'\Sabc'
result = fullmatch(re_str, '=abc')
print(result)

7) [字符集]

匹配字符集中出现的任意一个字符
注意:一个[]只能匹配一个字符
a.

[abc123]  -  匹配 a、b、c、1、2、3 中任意一个字符

b.

[a-z]    -   匹配从字符a到字符z之间的任意一个字符(匹配任意一个小写字母)
[A-Z]    -   匹配任意一个大写字母
[a-zA-Z] -   匹配任意一个字母
[0-9]    -   匹配任意一个数字字符
[\u4e00-\u9fa5]   - 匹配任意一个中文字符re_str = r'[cz+?]123'
result = fullmatch(re_str, '?123')
print(result)re_str = r'[\u4e00-\u9fa5]123'
result = fullmatch(re_str, '看123')
print(result)

练习:判断输入手机号码是否合法

re_str = r'1[3-9]\d\d\d\d\d\d\d\d\d'
result = fullmatch(re_str, '13598902763')
print(result)[]中-前面的字符编码值必须小于-后面的字符编码result = fullmatch(r'[a-0]abc', '0abc')[]中-如果不在两个字符之间,-就没有特殊功能直接表达它本身
result = fullmatch(r'[-09]abc', '-abc')
print(result)

练习:写一个正则表达式,要求可以匹配一个字符串:abc前面是一个数字、字母或者下划线

re_str = r'[a-zA-Z\d_]abc'
result = fullmatch(re_str, '_abc')
print(result)

8)[^字符集] - 取不在字符集中任意一个字符

[^\u4e00-\u9fa5]   - 匹配任意一个非中文字符
[^0-9]  -  匹配任意一个非数字字符
[^a-zA-Z]  - 匹配任意一个非字母字符print(fullmatch(r'[abc^]123', 'b123'))
print(fullmatch(r'[^abc]123', 'a123'))

1)\b - 检测是否是单词的边界

单词边界:字符串开头、字符串结尾、凡是能区分出两个不同单词的符号
注意:检测类的符号不影响匹配的长度,只是在匹配成功的时候做进一步的检测

message = 'how are you?i am fine!thank you!'
re_str = r'\d\d.\b\d\d'
print(fullmatch(re_str, '56=89'))

2)^ - 检测^所在的位置是否是字符串开头

re_str = r'\d^abc'
print(fullmatch(re_str, '1abc'))re_str = r'^\d\d\d'
print(fullmatch(re_str, '678'))re_str = r'^\d\d\d'
print(fullmatch(re_str, '678'))
print(search(re_str, 'shdj39极客时间238u丄282='))

3) $ - 检测$所在的位置是否是字符串结尾

re_str = r'\d\d$'
print(search(re_str, '时代峰峻78暗示法23沙发89'))
1. * - 匹配0次或多次
字符*    -  字符出现0次或多次re_str = r'a*'
print(fullmatch(re_str, 'aaa'))re_str = r'\d*'
print(fullmatch(re_str, '478923'))re_str = r'123[a-z]*'
print(fullmatch(re_str, '123ukl'))
2. + - 匹配1次或多次(至少1次)
re_str = r'a+'
print(fullmatch(re_str, 'a'))
3. ? - 匹配0次或1次
re_str = r'\d?abc'
print(fullmatch(re_str, '0abc'))

练习:写一个正则表达式可以匹配任意一个整数字符串

# '23874', '-234', '+2348977'
re_str = r'[-+]?\d+'
print(fullmatch(re_str, '+23874'))
4. {}
{N}   -  匹配N次
{M,N}  - 匹配M到N次
{M,}   - 匹配至少M次
{,N}   - 匹配最多N次(0~N次)re_str = r'\d{4}abc'
print(fullmatch(re_str, '6723abc'))re_str = r'a{2,5}123'
print(fullmatch(re_str, 'aaaaa123'))re_str = r'a{2,}123'
print(fullmatch(re_str, 'aaaaaaaaaaa123'))re_str = r'a{,2}123'
print(fullmatch(re_str, 'aa123'))

4)贪婪和非贪婪

在匹配次数不确定的情况下,匹配模式分为两种:贪婪和非贪婪

a.贪婪:

默认都是贪婪的(在能匹配到的前提下匹配次数尽可能多)

        *、+、?, {M,N}、{M,}、{,N}
b.非贪婪:

(在能匹配到的前提下匹配次数尽可能少)在匹配次数不确定的时候,次数后面加问号,匹配就是非贪婪的

      *?、+?、??、{M,N}?、{M,}?、{,N}?re_str = r'\d{2,}'
print(search(re_str, '护士227382abc你好!'))re_str = r'\d{2,}?'
print(search(re_str, '护士227382abc你好!'))

二、分支和分组

1.分支: |

# 正则1|正则2|正则3...
# 写一个正则匹配一个字符串:123abc 和 456abc
re_str = r'123abc|456abc'
print(fullmatch(re_str, '456abc'))re_str = r'123|345abc'
print(fullmatch(re_str, '123abc'))  # None
print(fullmatch(re_str, '123'))
print(fullmatch(re_str, '345abc'))

2.分组: ()

1)整体操作

# abc出现3次
re_str = r'(abc){3}'
print(fullmatch(re_str, 'abcabcabc'))# 写一个正则匹配一个字符串:123abc 和 456abc
re_str = r'(123|456)abc'
print(fullmatch(re_str, '456abc'))# 两个数字两个字母的结构重复4次: 34hj56kl67uj23Bm
re_str = r'(\d\d[a-zA-Z]{2}){4}'
print(fullmatch(re_str, '34hj56kl67uj23Bm'))

2)重复:

\M - 重复前面第M个分组匹配到的内容(M从1开始)

re_str = r'(\d\d)=\1abc'
print(fullmatch(re_str, '67=67abc'))re_str = r'(\d\d)-([a-z]{3})-\2-\1'
print(fullmatch(re_str, '23-bnm-bnm-23'))

3)捕获

findall()     # 查找字符串中所有符合要求的子串

3.转义符号:

在具有特殊功能或者特殊意义的符号前加,让功能消失

re_str = r'\.\d\d'
print(fullmatch(re_str, '.23'))re_str = r'abc\+\d\d'
print(fullmatch(re_str, 'abc+34'))

注意:独立存在有特殊功能的符号在[]中功能会自动消失

re_str = r'[-+.]abc'
print(fullmatch(re_str, '.abc'))

一不小心就这么多内容了,先慢慢吸收,明天还有部分的知识(re模块),今天就到这里吧~再见!

day15-医生的处方、道士的鬼符、程序员的正则表达式相关推荐

  1. 32岁医生放弃医院编制,转行去做程序员!

    这年头大环境不好,程序员都想方设法往体制内跑,希望能端起稳定的铁饭碗.但也有人是逆行者,明明在体制内,却非要跳出去当程序员. 一个网友发帖说自己今年32岁,放弃了月薪7500元的二甲医院编制,转行去做 ...

  2. 第六十八期:程序员与医生

    8月25日 以下文章来源于崖边小生 ,作者道友留步` 程序员与医生 久病未能成医,然而却悟出了程序员与医生的道理.细想来,程序员和医生这个职业竟如此相似. 职业的诞生 上帝创造了人类,而人类又创造了程 ...

  3. 原来医生的处方不是随便乱写的...

    1 奇奇怪怪的知识又增加了 (素材来源网络,侵删) ▼ 2 像极了早上刚睡醒炸毛的你 ▼ 3 原来医生的处方不是瞎写的 ▼ 4 当爷爷不当孙子 (素材来源网络,侵删) ▼ 5 40厘米的身高差 (素材 ...

  4. 企业医疗服务后台管理/互联网医疗/远程会诊/统计分析/医生管理/处方管理/药品管理/运营管理/挂号单管理/预约管理/结算转账管理/问诊管理/药店管理/科室管理/医院管理/电子处方/后台管理原型/rp

    企业医疗服务后台管理/互联网医疗/远程会诊/统计分析/医生管理/处方管理/药品管理/运营管理/挂号单管理/预约管理/结算转账管理/问诊管理/药店管理/科室管理/医院管理/电子处方/后台管理原型/rp源 ...

  5. 医药/医疗/互联网医疗服务平台/问诊/挂号/开药/处方/医生/医院/问诊订单管理/移动端问诊医疗系统/医生端处方开药系统/web端医药服务平台管理/axure原型/rp源文件/健康咨询/视频问诊/统计

    医药/医疗/互联网医疗服务平台/问诊/挂号/开药/处方/医生/医院/问诊订单管理/移动端问诊医疗系统/医生端处方开药系统/web端医药服务平台管理/处方管理/axure原型/rp源文件/健康咨询/视频 ...

  6. 阿里程序员每天都沮丧想离职!天天去厕所哭!求助心理医生!其他阿里员工:我们也这样!阿里究竟怎么了?...

    请点击上面 一键关注! 阿里是许多程序员的梦想之地,但它却更像是个围城.没进去的人想进去,进去的人想逃离. 一个阿里的同学哭诉自己来到阿里后每天都沮丧,想离职,去厕所哭了N次,还去看了心理医生,问大家 ...

  7. 好程序员web前端CSS选择符(选择器):表示要定义样式的对象

    好程序员web前端CSS选择符(选择器):表示要定义样式的对象 1) 元素选择符/类型选择符(element选择器 ) 如:div{width:100px; height:100px; backgro ...

  8. C++ 程序员要像医生一样调试代码?

     作为 C++ 程序员,你对调试代码是一种什么态度?英文原文:Debug like a doctor "现在的编程工作就像是对你需要解决处理的部分做科学研究." --Geral ...

  9. 谁说程序员赚得比医生少?网友:我一年的收入医生一辈子都赚不到

    最近,某阿里程序员在脉脉上发布了自己的收入情况,并直言协和医院的主治医生一辈子都赚不到这么多钱.此言论立刻引起了大家的热议,评论数超过500条,如下图所示: 以上可以看出,楼主在阿里里面是P7级别,每 ...

  10. 今年春晚轮到谁来发红包?百度程序员:永不宕机符已备好

    自打手机红包问世,每年春晚拿着手机互动抢红包就像"难忘今宵"一样成为了春晚的保留节目. 从2015年微信首度与春晚合作成为独家网络互动平台为大家发红包开始,之后的2016年至201 ...

最新文章

  1. AjaxPro组件的应用(实现Ajax)
  2. nacos 配置_阿里巴巴 Nacos 分布式配置中心原理
  3. 一文带你弄懂普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法
  4. PyTorch 实现 Mask-RCNN
  5. 使用Eclipse连接SAP Netweaver系统遇到的错误消息和解决办法
  6. Socket网络编程--简单Web服务器(6)
  7. 解决 IE8下 vs2008 无法调试
  8. mouseup 左键_javascript中mouseup事件丢失的原因与解决办法
  9. Leaflet文档阅读笔记-Quick Start Guide笔记
  10. 使用nagios监控oracle
  11. 任意线段集生成多边形_self-attention缺失文本生成||Text Infilling
  12. 重磅分享:一份关于车贷的政策性文件分享
  13. Halcon 学习总结——错误处理方法
  14. css选择器([class*= icon-], [class^=icon-] 的区别)
  15. MyBatis简单了解
  16. 《软件定义网络:基于OpenFlow的SDN》一一3.4 本章总结
  17. C语言实验报告册中级进步,C语言实验报告册
  18. windows安装memcached
  19. 计算机应用基础—多媒体技术(二)
  20. 光流的基本概念和原理-Lucas–Kanade光流算法

热门文章

  1. mysql及格率70以上_数据库实例(统计最高分学生信息,不及格率等等)
  2. ES3~ES6数组的方法总结
  3. android如何设置自适应大小的背景图片,Android 背景图片自适应方案
  4. 数字电路基础:系统设计优化
  5. java发送短信功能工具类及思路详解
  6. Centos8装Wine笔记
  7. C语言程序设计摘抄笔记1
  8. python ipo模型是指什么?
  9. win10系统如何设置局域网服务器,win10系统设置局域网地址的操作方法
  10. 校园网显示dns服务器解析出错,天翼校园网dns解析出错怎么办