文章目录

  • 正则表达式
    • 一、基本使用
    • 二、进阶——更精确
    • 三、re模块
      • 1、match()方法
      • 2、split()——切分字符串
      • 3、()——分组
      • 4、贪婪匹配
      • 5、编译

正则表达式

  • 用于匹配字符串。
  • 思想 :用一种描述性的语言来给字符串定义一个规则,凡事符合规则的字符串,则认为“匹配”,否则,不合法。

一、基本使用

符号 含义
\s 匹配一个空格、空白符
\d 匹配一个数字
\w 匹配一个字母或数字
. 匹配任意字符
* 匹配任意个字符(包括0个)
+ 至少一个字符
表示0个或1个字符
{n} 表示n个字符
{n, m} 表示n~m个字符

注意:可以使用多者的组合形式。
eg:\d{3}\s+\d{3,8}

  1. \d{3}表示匹配 3 个数字,例如’010’;
  2. \s 可以匹配一个空格(也包括 Tab 等空白符),所以\s+表示至少有一个空格,例如匹配’ ', ’ '等;
  3. \d{3,8}表示 3-8 个数字,例如’1234567’。

二、进阶——更精确

[] 表示范围,eg:

  • [0-9a-zA-Z_] 可以匹配一个数字、字母或者下划线;
  • [0-9a-zA-Z_]+可以匹配至少由一个数字、字母或者下划线组成的字符串;
  • [a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串;==》合法的变量

A|B 匹配 A 或 B
^ 表示行的开头,^\d 表示必须以数字开头
$ 表示行的结束,\d$ 表示必须以数字结束

三、re模块

包含所有正则表达式的功能,需特别注意 \ 转义 或 使用r前缀(可以不考虑转义的问题,推荐)

1、match()方法

match()方法 判断是否匹配,如果匹配成功,返回一个 Match 对象,否则返回 None。

import re
print(re.match(r'^\d{3}\-\d{3,8}$', '010-12345'))
print(re.match(r'^\d{3}\-\d{3,8}$', '010 12345'))

结果输出

<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
None

常用判断方法

test = '用户输入的字符串'
if re.match(r'正则表达式', test):print('ok')
else:print('failed')

2、split()——切分字符串

利用正则表达式将不规范的输入转化为正确的数组

print(re.split(r'\s+','a b     c'))
print(re.split(r'[\s\,]+', 'a,b, c   d'))
print(re.split(r'[\s\,\;]+', 'a,b;; c   d'))

输出结果

['a', 'b', 'c']
['a', 'b', 'c', 'd']
['a', 'b', 'c', 'd']

3、()——分组

用于提取子串,用 () 表示要提取的分组。

m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
print(m)
print(m.group(0))   # 第一个匹配的子串,永远是原始字符串
print(m.group(1))   # 第二个匹配的子串
print(m.group(2))   # 第三个匹配的子串t = '19:05:30'
m = re.match(r'(0[0-9]|1[0-9]|2[0-3])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$', t)
print(m.groups())

结果输出

<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
010-12345
010
12345
('19', '05', '30')

4、贪婪匹配

正则匹配默认是贪婪匹配,即匹配尽可能多的字符。

## 贪婪匹配
print(re.match(r'^(\d+)(0*)$', '102300').groups())
## 非贪婪匹配——添加?
print(re.match(r'^(\d+?)(0*)$', '102300').groups())

结果输出

('102300', '')
('1023', '00')

5、编译

当使用正则表达式时,re模块内部会做两个事:

  • 编译正则表达式,若其本身不合法,则报错;
  • 用编译后的正则表达式来匹配字符串。

预编译正则表达式(若该正则表达要重复使用几千次)
编译后生成Regular Expression 对象,可以调用对应的方法实现字符串匹配。

# 编译正则表达式
re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
# 使用
print(re_telephone.match('010-123456').groups())
print(re_telephone.match('010-8086').groups())

结果输出

('010', '123456')
('010', '8086')

【Python】编程笔记10相关推荐

  1. Python 常用线型 + 点符号 + 颜色汇总 ∈ Python 编程笔记

    文章目录 Part.I 线型 Chap.I 基本线型 Chap.II 元组线型 Part.II 点符号 Chap.I 基本符号 Chap.II 高级符号 Part.III 颜色 Chap.I 单词或字 ...

  2. python两数相加代码_一边学编程,一边学语数外,用python编程全排列10以内两数加法...

    原标题:一边学编程,一边学语数外,用python编程全排列10以内两数加法 编程并不神秘 编程只是解决问题的一共方法 python是一门编程语言 python是一种解决问题的编程工具 在小学阶段,学习 ...

  3. Python学习笔记--10.Django框架快速入门之后台管理admin(书籍管理系统)

    Python学习笔记--10.Django框架快速入门之后台管理 一.Django框架介绍 二.创建第一个Django项目 三.应用的创建和使用 四.项目的数据库模型 ORM对象关系映射 sqlite ...

  4. Python自学笔记10:实操案例七(根据星座测试性格特点、模拟12306火车订票下单)

    Python自学笔记10:实操案例七(根据星座测试性格特点.模拟12306火车订票下单) 网课传送门:https://www.bilibili.com/video/BV1Sw411Z779?p=157 ...

  5. Python编程笔记6字典

    Python编程学习笔记,第6记:数据结构之字典           本节将学习:能够将相关信息关联起来的Python字典.如何定义字典.如何使用存储在字典中的信息.如何访问和修改字典中的元素.如何遍 ...

  6. Python编程笔记

    Table of Contents 1. 绪论 2. python编程概述 2.1. 知识点 2.2. 良好的编程习惯 2.3. 常见编程错误 2.4. 测试和调试提示 2.5. 移植性提示 3. 控 ...

  7. Python 编程笔记(本人出品,必属精品)

    文章目录 Part.I 准备工作 Chap.I 下载安装 Chap.II 实现快捷键清屏 Chap.III 概念汇编 & 注意事项 Part.II 基础知识 Chap.I 快应用 Chap.I ...

  8. Python编程的10个经典错误及解决办法

    接触了很多Python爱好者,有初学者,亦有转行人.不论大家学习Python的目的是什么,总之,学习Python前期写出来的代码不报错就是极好的.下面,严小样儿为大家罗列出Python3十大经典错误及 ...

  9. 《Python学习笔记》——南溪的python编程笔记

    1 致谢 感谢张轩老师分享的关于函数式编程的博文! 1 前言 Python中使用函数式编程也是很重要的: 2 函数 (对于函数编写的原则,我们参考了网易云音乐大前端团队的博文网易云音乐大前端团队--& ...

最新文章

  1. blog搬家通知---------------------------------------
  2. 数据库基础操作(二)数据库表数据的增删查改
  3. [MySQL] 查询一段时间记录
  4. Win10怎么设置虚拟内存?
  5. Vim中数字自增、自减
  6. ECS 按量付费VPC实例停机不收费FAQ
  7. 机器学习基石HOW BETTER部分(1)
  8. 监狱干警定位管理系统
  9. T9社区注册流程记录(笔记)
  10. Typora下载链接
  11. Houdini11:材质
  12. Nmap端口扫描windows版
  13. 语音信号处理基础知识之频谱、相位谱、幅度谱、功率谱及语谱图
  14. java wmic_wmic
  15. ffmpeg gl-transitions 图片合成视频 转场特效
  16. Spring data elasticsearch添加同义词组件实现同义词热更新
  17. 【Shior学习】subject和session
  18. c语言编辑三色球问题,C语言实例编程:三色球问题
  19. 测试微信号连接的开发的步骤
  20. 利用python进行平行束FBP重建结果

热门文章

  1. 在开发中遇到过内存溢出么?原因有哪些?解决方法有哪些?
  2. Nginx详细安装部署教程
  3. php商品分类显示商品,ecshop首页显示全部商品分类的方法
  4. 蜘蛛纸牌java注释_自己摸索的纸牌游戏代码,感觉还有很多知识不懂,任重道远啊!...
  5. 用python倒序输出一个字符串_Python 反转字符串(reverse)的方法小结
  6. oracle虚拟机 centos6.5,虚拟机oracle virtualbox 上安装centos6.5 网络设置
  7. mysql genlog 分析_Mysq性能分析 —— Genral log(普通日志)与 Slow log(慢速日式)...
  8. python计算一元一次方程的根_5-2 一元二次方程
  9. 苹果数据线不能充电_外媒痛批苹果!iPhone 12不送充电器绝非为环保,理由太真实!|充电器|数据线|手机|iphone...
  10. apache 部署python3_flask+apache2+wsgi+python3 部署(挖坑记)