1.什么是正则表达式

正则表达式是让复杂的字符串处理变得更加简单的工具
from re import fullmatch

2.正则语法

fullmatch(正则表达式, 字符串) - 判断指定的字符串是否满足正则表达式描述的规则,如果不满足返回None
python中正则表达式是写到单引号或者双引号里面,例如:‘正则表达式’;js中正则表达式是放在两个/之间的,例如:/正则表达式/

  1. 普通字符
    普通字符指的是正则表达式中除了特殊符号以外的符号都是普通字符
    普通字符在正则中表示这个符号本身。
  2. . - 匹配一个任意字符
    规则:一个字符串有3个字符,第一个字符是a,最后一个字符是c,中间是任意字符
re_str = 'a.c'
result = fullmatch(re_str, 'a胡c')
print(result)
  1. \d - 匹配一个任意数字
    规则:一个字符有4个字符,第一个字符是a,最后一个字符是b,中间是两个任意数字
re_str = r'a\d\db'
result = fullmatch(re_str, 'a49b')
print(result)
  1. \s - 匹配一个任意空白字符
    空白字符:空格、\n、\t
    #规则:一个字符串开头是两个数字,中间一个空白,然后再两个数字
re_str = r'\d\d\s\d\d'
result = fullmatch(re_str, '23 89')
print(result)
  1. \D - 匹配任意一个非数字字符
    规则:一个字符串有4个字符,第一个字符不是数字,后面是abc
re_str = r'\Dabc'
result = fullmatch(re_str, '=abc')
print(result)
  1. \S - 匹配任意一个非空白字符
    规则:一个字符串有5个字符,第一个字符是数字,第二个字符不是空白字符,后面是abc
re_str = r'\d\Sabc'
result = fullmatch(re_str, '8=abc')
print(result)
  1. [字符集] - 匹配字符集中任意一个字符
    [abc你] - 能匹配’a’或者’b’或者’c’或者’你’
    [a\dbc] - 能匹配’a’或者’b’或者’c’或者任意一个数字
    [1-9] - 匹配1到9中任意一个字符
    [a-z] - 匹配任意一个小写字母
    [A-Z\d] - 匹配任意一个大写字母或者任意一个数字
    [a-zA-Z] - 匹配任意一个字母
    [\u4e00-\u9fa5] - 匹配任意一个中文
    [abc-] - 能匹配’a’或者’b’或者’c’或者’-’
    注意:
  1. 一个[]只能匹配到一个字符
  2. -如果在两个字符之间表示范围,这个-前面的字符的编码值必须小于-后面的字符的编码值
  3. -如果不在两个字符之间,表示-本身
re_str = r'1[a=bc0]2'
result = fullmatch(re_str, '1=2')
print(result)re_str = r'1[\dxy胡]2'
result = fullmatch(re_str, '192')
print(result)# re_str = r'a[2345678]b'
re_str = r'a[2-8]b'
result = fullmatch(re_str, 'a5b')
print(result)# 练习:写一个正则表达式匹配一个字符:123前面是一个数字、字母或者下划线
re_str = r'[\da-zA-Z_]123'
result = fullmatch(re_str, '_123')
print(result)
  1. [^字符集] - 匹配不在字符集中的任意一个字符

[^abc] - 匹配一个除了’a’、‘b’、'c’以外的任意字符
[^a-zA-Z] - 匹配任意一个非字母字符

re_str = r'[^abc]123'
result = fullmatch(re_str, 'A123')
print(result)

3.正则检测类符号

from re import fullmatch, search

1) 匹配类符号(一个符号必须匹配一个对应的字符):普通字符、.、\d、\s、\D、\S、[字符集]、[^字符集]

2) 检测类符号:检测符号所在的位置是否符号要求

3) 注意:检测类的符号不影响匹配

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

单词边界:所有可以划分出两个不同单词的符号,包括空白、标点符号、字符串开头或者结尾

re_str = r'abc\b,123\b'
result = fullmatch(re_str, 'abc,123')
print(result)re_str = r'a\b.b'
result = fullmatch(re_str, 'a,b')
print(result)
2.\B - 检测是否是非单词边界
re_str = r'a.\Bb'
result = fullmatch(re_str, 'apb')
print(result)
3.^ - 检测是否是字符串开头
re_str = r'^\d\d\d'
result = fullmatch(re_str, '627')
print(result)re_str = r'^\d\d\d'
result = search(re_str, 'sjhs是276鲨大富豪shj345')
print(result)   # None
4.$ - 检测是否是字符串结尾
re_str = r'\d\d\d'
result = search(re_str, 'sjhs是276鲨大富豪shj345')
print(result)   # '276're_str = r'\d\d\d$'
result = search(re_str, 'sjhs是276鲨大富豪shj345')
print(result)   # '345'

4.匹配次数

from re import fullmatch, search, findall

  • .* - 匹配0次或多次
  • a* - 匹配任意多个字符a
  • \d* - 匹配任意多个\d(任意多个任意数字字符)
  • + - 匹配1次或者多次
  • ? - 匹配0次或1次
  • {}
    {N} - 匹配N次
    {M,N} - 匹配M到N次,{0,1} == ?
    {M,} - 匹配至少M次, {0,} == * {1,} == +
    {,N} - 匹配最多N次

5.贪婪与非贪婪

在匹配次数不确定的时候匹配模式分别贪婪和非贪婪

  1. 贪婪:在能匹配成功的前提下尽可能多的去匹配,例如匹配1次、3次和4次都能匹配成功,最后取4次。
    默认情况下,所有的不确定次数匹配的时候都是贪婪的: *、+、?、{M,N}、{M,}、{,N}
  2. 非贪婪:在能匹配成功的前提下尽可能少的去匹配,例如匹配1次、3次和4次都能匹配成功,最后取1次。
  3. 在匹配次数不定的次数后加?,就变成非贪婪模式:*?、+?、??、{M,N}?、{M,}?、{,N}?
re_str = r'a\d{2,5}?b'
result = search(re_str, '手机号a278b还是你b黄寺b大街')
print(result)   #  'a278b'

6.分支与分组

1.分组

  • 用()将正则的一部分括起来看成一个整体进行操作
    用法一:看成一个整体进行操作
'67abc89abc34abc'
re_str = r'\d{2}[a-z]{3}\d{2}[a-z]{3}\d{2}[a-z]{3}'
print(fullmatch(re_str, '67abc89abc34abc'))
  • 用法二:整体重复
    在包含分组的正则中,可以通过\N来重复前面第N个分组匹配到的内容
re_str = r'a(\d{2})=\1'
print(fullmatch(re_str, 'a97=97'))re_str = r'a(\d{2})=\1{2}'
print(fullmatch(re_str, 'a97=9797'))re_str = r'([a-z]+)=(\d{2,4})=\2\1'
print(fullmatch(re_str, 'ak=879=879ak'))
  • 用法三:捕获(只针对findall有效)
re_str = r'tel:(\d{5})'
print(findall(re_str, 'tel:23768, name:xiaoming, age:18岁,id:27237486; tel:72891, name:张三, age:67岁, id:23479782'))

2.分支 - |

  • r’正则表达式1|正则表达式2’ - 先用正则1进行匹配,如果失败再使用正则2进行匹配
re_str = 'abc\d{3}|abc[A-Z]{3}'    # abc234、abcKLH
print(fullmatch(re_str, 'abcMKL'))re_str = r'abc\d{3}|[A-Z]{3}'   # abc234、KMN
print(fullmatch(re_str, 'KSM'))re_str = r'abc(\d{3}|[A-Z]{3})'   # abc234、abcKLH
print(fullmatch(re_str, 'abc678'))

7.转义字符

  • 正则的转义符号:在具有特殊功能或者特殊意义的符号前加\,让符号原来的功能和意义消失,表示符号本身
re_str = r'abc\.'
print(fullmatch(re_str, 'abc.'))re_str = r'abc\+'
print(fullmatch(re_str, 'abc+'))re_str = r'\(\d{3}\)'
print(fullmatch(re_str, '(234)'))
  • 具有特殊意义和功能的独立的符号,放在[]里面,对应的功能会自动消失,例如:+、?、*、$、^(不放在最前面)、|等
re_str = r'abc[.\]+?*$^(]'
print(fullmatch(re_str, 'abc]'))

day15-正则表达式相关推荐

  1. Python学习:day21正则表达式

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: day01基础知识 day02知识分类 day03 ...

  2. Python学习:day20正则表达式

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: day01基础知识 day02知识分类 day03 ...

  3. Python学习笔记--day15 内置模块和开发规范

    day15 内置模块和开发规范 内置模块 json time datetime re 开发规范 主文件 配置文件 数据 附件 业务代码 1. 内置模块 1.1 json json模块,是python内 ...

  4. day15 内置模块和开发规范

    day15 内置模块和开发规范 版权声明:本博客转载自路飞学城Python全栈开发培训课件,仅用于学习之用,严禁用于商业用途,未经授权,严禁转载. 欢迎访问路飞学城官网:https://www.luf ...

  5. 模块二 day15 内置模块和开发规范

    day15 内置模块和开发规范 目标:掌握常见的内置模块的使用及了解软件开发的规范. 今日概要: 内置模块 json time datetime re 开发规范 主文件 配置文件 数据 附件 业务代码 ...

  6. Day15 内置和开发规范

    day15 内置模块和开发规范 目标:掌握常见的内置模块的使用及了解软件开发的规范. 今日概要: 内置模块 json time datetime re 开发规范 主文件 配置文件 数据 附件 业务代码 ...

  7. 轩小陌的Python笔记-day15 内置模块(剩余)和开发规范

    day15 内置模块和开发规范 目标:掌握常见的内置模块的使用及了解软件开发的规范. 今日概要: 内置模块 json time datetime re 开发规范 主文件 配置文件 数据 附件 业务代码 ...

  8. 通过正则表达式校验手机号码,拿走即用!

    校验手机号码 2021/01/06更新,电信新增了191号段 1. 单纯校验长度 2.正则表达式校验数字 3.正则表达式校验是否是大陆号码 4.正则表达式校验是否是香港号码 //校验长度private ...

  9. Linux shell 学习笔记(15)— shell 正则表达式

    1. 定义 BRE 模式 1.1 纯文本 第一条原则就是:正则表达式模式都区分大小写.这意味着它们只会匹配大小写也相符的模式. $ echo "This is a test" | ...

  10. re2正则表达式匹配引擎的c接口版本cre2的中文使用手册

    前言 re2 官方地址: https://github.com/google/re2 cre2 官方地址: https://github.com/marcomaggi/cre2 1 基本类型定义 不透 ...

最新文章

  1. linux使用wget下载https开头url的文件
  2. 搭载M1芯片的MacBook能不能当开发主力机?程序员半个月的亲身体验都在这里
  3. SAP Spartacus TypeScript源代码中的三个点用法
  4. 虚拟串口服务器zenetmanager,Avocent服务器/串口管理 KVM
  5. Java的编年史和低延迟
  6. android监听应用服务,Android应用中Back键的监听及处理实例
  7. 【Elasticsearch】elasticsearch 磁盘相关常用配置 磁盘优化
  8. php的计划任务定时执行
  9. 寒假小软件开发记录02--布局
  10. python获取文件修改时间_Python-获取文件最后修改时间 | 学步园
  11. 使用 CRF 做中文分词
  12. 华为android手机root,华为手机怎么root
  13. python提取一句话中的数字_从Python的字符串列表中提取数字
  14. 2018招行笔试分红包
  15. thinkpad x1e 隐士进入bios
  16. 基于CSS的个人网页
  17. .net是什么域名?域名注册需要实名制吗?
  18. APP静默安装卸载管理器实现与上架到应用宝和豌豆荚
  19. 记一次简单线上比赛--CTF(初级)
  20. 图片去水印软件分享!这三个好用的软件不能错过!​

热门文章

  1. 【报告分享】2021中国医生洞察报告-丁香园(附下载)
  2. android仿微信图片选择预览裁剪,仿微信图片选择
  3. Linux 安装rabbitmq
  4. 个人防骗大全精选(1)
  5. Xeam Visual Installer白金版,Xeam Visual Installer完整用户体验
  6. 每日英语:China's Red Cross Tries to Rebuild After Self-Inflicted Disaster
  7. Junit测试多线程与Shutting down ExecutorService ‘applicationTaskExecutor‘
  8. 【四】多智能体强化学习(MARL)近年研究概览 {Learning cooperation(协作学习)、Agents modeling agents(智能体建模)}
  9. List去除重复数据的几种方式和性能比较
  10. 一种基于局域网的点对点语音通信