一. 正则表达式

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

二.常用的正则规则

1.字符

2.量词

三.python re模块常用一些规则详解

1.re常用的一些方法
match: 从头开始匹配 一旦匹配失败就返回None
search: 在整个字符串进行匹配
共同点: 1、只对字符串查询一次 2 返回值都是 re.match对象
finditer: 返回可迭代对象 查找所有匹配数据放到一个可迭代对象
findall: 将所有查找到的字符串的列表放到一个列表里
fullmatch: 完整匹配 字符串需要完全满足规则
注: 调用 re.match re.search 或者对re.finditer 结果进行遍历 结果都是re.match对象

四.一些函数方法使用的示例

1.获取到research匹配字符串的结果

data_str = "qwert12yui3o5p6a7d8fkglctsdfstg"
p1 = re.search(r'2.*3.*5.*7.*8', data_str)
# 获取到匹配字符串的结果
# 用group表示正则表达式的分组
# 如果没有分组 默认只有一组
# 分组下表从0开始
p2 = re.search(r'(2.*)3.*5.*(7.*8)', data_str)
# 在正则表达式中使用()表示一个分组
# (?P<name> 表达式)  可以给分组起名字
p3 = re.search(r'(?P<name>2.*)3.*5.*(7.*8)', data_str)

2.同一个规则匹配不同字符串

data_str = "qazxs13wedc12cdews12123\nxzaq12313"r = re.compile(r'.*e')print(r.search(data_str))

3.正则修饰符

# 正则表达式规则
# 数字和字母表示本事
# 很多字母前面添加 \ 会有特殊含义
# 绝大多数标点符号都有特殊含义
# 如果想要使用标点符号需要加\
print(re.search(r'x', "hello xyz"))
print(re.search(r'5', "dst56"))
print(re.search(r'\d', "dsdfs242"))
print(re.search(r'\+', "ddd+++"))# \s表示任意非打印字符
print(re.search(r'\s', "hello \sworld "), "ffffff")
# \n表示换行
print(re.search(r'\n', "hello \nnworld "), "ffffff")
# \t 制表符x = "hello world"
print(re.search(r'\s', x)) # 空格
# # 特殊字符
# # () 用来表示一个分组
# . 表示除了换行以外的任意字符 如果想要匹配 需要使用、\.
print(re.search(r'h(\d+)x', "dddsdh43xfad"))
print(re.search(r'(.*)', '(1+1)*3+5'))
print(re.search(r'\(.*\)', '(1+1)*3+5'))

4.区间可选项

# [] 用来表示区间可选项 [x-y]从x到y区间 包含x和y [0-9]从1-9
m2 = re.search(r'f[0-9]+m', 'fmf421513453m')
m3 = re.search(r'f[a-z]m', 'f5mfgm')
# 或者关系 0<value<1 或者a<value<d 或者value=x
m4 = re.search(r'f[0-1a-dx]+m', 'fmf421513453mafsfdm')
print(m2)
# | 表示或者  和[]区别 []里面表示的是区间 |中间表示可选值
m2 = re.search(r'f(x|v|d)m', 'fvmf421513453mafsfdm')

5.用来规定出现的次数

# {}用来规定出现的次数 {n,}表示n次以上 {, n} 表示前面出现n次及n次以下  {m, n}表示出现次数m到n次
m3 = re.search(r'o{2,}', "goooooood")
print(m3)
# * 表示前面的元素出现任意次数(0) 次以上  + 表示前面元素至少出现一次 等价于{1, }
m4 = re.search(r'go*d', "goooood")
print(m4)
m5 = re.search(r'go+d', "goooood")
print(m5)

6.贪婪模式与非贪婪模式

在python的匹配中默认是贪婪模式 尽可能多的匹配 添加?可将贪婪模式转化为非贪婪模式 尽可能少的匹配

# 只匹配到aa2
print(re.search(r'aa\d+?', "aa2233ddd"))
# 能够匹配到aa2233
print(re.search(r'aa\d+', "aa2233ddd"))
#因为后面有ddd所以会将数字全部匹配
print(re.search(r'aa(\d+?)ddd', "aa2233ddd"))
print(re.search(r'aa(\d+)ddd', "aa2233ddd"))

五.一些常用的匹配规则

1.判断用户输入内容是否是数字,如果是数字 则转换成数据类型

re.fullmatch(r'\d+(\.?\d+)?', num)

2.以非数字开头,后面偶字母数字_ 组成的长度4到14位的字符串

re.search(r'^\D[a-zA-Z_\-]{4, 13}', data)

3.手机号匹配

re.fullmatch(r'^((13[0,5-9])|(15[0-9]))[0-9]{8}$', data)

4.身份证号匹配

re.fullmatch(r'^[1-9]\d{5}(18|19|20|21)\d{2}(([0-2][1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9X]', data)

5.车牌号匹配

re.fullmatch(r'^[京豫警军A-Z][A-Z][A-Z0-9]{4}[A-Z0-9挂学警]', data)

python re正则模块详解相关推荐

  1. python之sys模块详解_(转)python之os,sys模块详解

    python之sys模块详解 原文:http://www.cnblogs.com/cherishry/p/5725184.html sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和 ...

  2. 【Python】python之subprocess模块详解

    [Python]python之subprocess模块详解 subprocess模块 subprocess是Python 2.4中新增的一个模块,它允许你生成新的进程,连接到它们的 input/out ...

  3. Python的pickle模块详解(包括优缺点及和JSON的区别)

    文章目录 一.pickle是什么? 1.pickle的优缺点 2.pickle和JSON的区别 3.pickle的应用总结 二.pickle的用法 1. pickle接口 2. pickle实例 结语 ...

  4. python中logging模块详解_python logging日志模块详解

    logging 日志模块详解 用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方或者在一个文件中查看的时候,这 ...

  5. python当中时间模块详解,包括time,timeit,datatime

    目录 time 模块 -- 时间获取和转换 以下三个比较常见: time.perf_counter() time.process_time() time.sleep(secs) timeit 模块详解 ...

  6. Python的PyYAML模块详解

    文章目录 注:原文链接 简介 安装 简单安装 从源码安装 最常被问到的问题 使用详解 加载YAML 转储YAML 构造.表示和解析 YAML语法 文档 块序列 块映射 流集合 标量 别名 标签 YAM ...

  7. python之re模块详解

    re模块 功能:用来匹配字符串(动态.模糊的匹配),爬虫用的多. 一.常用方法: match():从头匹配 search():从整个文本搜索 findall():找到所有符合的 split():分割 ...

  8. Python中time模块详解

    转载自:http://qinxuye.me/article/details-about-time-module-in-python/ 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间 ...

  9. Python os.path() 模块 详解 附算例

    Python os.path() 模块 函数 说明 os.path.abspath(path) 返回绝对路径 os.path.basename(path) 返回文件名 os.path.commonpr ...

最新文章

  1. JDBC常见面试题集锦(一)
  2. 115网盘如何打开php文件格式,115网盘下载:因纽特语教材(初级+高级+音频)
  3. 服务器应用服务为何卡顿?原来是内存耗尽惹的祸!
  4. python 模块 包 库_模块(包、库)
  5. 宿松县事业单位计算机基础知识,计算机基础知识试题(事业单位考试)
  6. MySQL中主键的选择与磁盘性能
  7. linux中umask的使用
  8. Flutter 生命周期
  9. java循环隔行变色_c:foreach标签详解----(隔行换背景颜色的问题)
  10. python对数组的操作_Python Numpy库对数组的操作详解,
  11. DOSBOX 安装与使用
  12. 差分密码分析读书报告
  13. 用友服务器的系统管理,用友软件系统管理模块常见问题解析及方法
  14. WebRTC 非常适用于智能家庭安防摄像头
  15. 深度好文|面试官:进程和线程,我只问这19个问题
  16. pb 如何导出csv_打开CSV格式文件?英雄请留步
  17. 英语学(xiao 二声)习__字母读音
  18. 《Linux驱动:网络设备驱动》
  19. 知识图谱技术与应用-知识表示
  20. 一位计算机专业硕士毕业生的求职经历和感想[转载]

热门文章

  1. 防火墙NAT综合实验——nat控制,豁免,远程,DMZ区域(带命令)
  2. 京东20210618活动脚本
  3. 什么是嵌入式服务器?为什么要使用嵌入式服务器? -- java面试
  4. 计算机网络运输层知识点,计算机网络复习——Ch6传输层
  5. 计算机网络---传输层
  6. 正确安装破解后,打开Matlab R2018a 报错License Manager Error-8
  7. 2db多少功率_db换算(db和功率的换算)
  8. 右键新建缺少word、excel选项问题处理
  9. Numpy学习07-随机抽样
  10. hdu 1069 Monkey and Banana 【动态规划】