正则表达式(Regluar Expressions)又称规则表达式,在代码中常简写为REs,regexes或regexp(regex patterns)。它本质上是一个小巧的、高度专用的编程语言。 通过正则表达式可以对指定的文本实现

匹配测试、内容查找、内容替换、字符串分割 等功能。

re模块介绍

Python中的re模块提供了一个正则表达式引擎接口,它允许我们将正则表达式编译成模式对象,然后通过这些模式对象执行模式匹配搜索和字符串分割、子串替换等操作。re模块为这些操作分别提供了模块级别的函数以及相关类的封装。

正则表达式一些小规则

①元字符

②量词

③贪婪和非贪婪匹配

总是在量词范围内尽量多匹配 - 贪婪

总是在量词范围内尽量少匹配 - 惰性

.*?x 匹配任意内容任意次数 遇到x就停止

.+?x 匹配任意内容至少1次 遇到x就停止

④转义符问题

. 有特殊的意义,取消特殊的意义\

取消一个元字符的特殊意义有两种方法

在这个元字符前面加 \

对一部分字符生效,把这个元字符放在字符组里

[.()+?*]

Python --> re模块

findall

会优先显示分组内的内容

*****取消优先显示(?:正则)

search

只能返回第一个符合条件的项

得到的结果需要.group取值

默认获取完整的匹配结果

通过group(n)取第n个分组中的内容

# search 还是按照完整的正则进行匹配,显示也显示匹配到的第一个内容,但是我们可以通过给group方法传参数

# 来获取具体文组中的内容

ret = re.search('9(\d)(\d)','19740ash93010uru')

print(ret) # 变量 -- >

if ret:

print(ret.group()) # --> 974

print(ret.group(1)) # --> 7

print(ret.group(2)) # --> 4

# findall

# 取所有符合条件的,优先显示分组中的

# search 只取第一个符合条件的,没有优先显示这件事儿

# 得到的结果是一个变量

# 变量.group() 的结果 完全和 变量.group(0)的结果一致

# 变量.group(n) 的形式来指定获取第n个分组中匹配到的内容

# 加上括号 是为了对真正需要的内容进行提取

ret = re.findall('<\w+>(\w+)\w+>','

askh930s02391j192agsj

')

print(ret) # --> ['askh930s02391j192agsj']

其他的内容在代码中有详细的注释,大家可以复制我的代码一步一步运行然后实验

以下的内容有:split sub subn math,compile,finditer

# split sub subn math,compile,finditer

# split

res = re.split('\d+', "cyx123456cyxx")

print(res) # --> ['cyx', 'cyxx']

res = re.split('(\d+)', "cyx123456cyxx") # 保留分组

print(res) # --> ['cyx', '123456', 'cyxx']

# sub 替换

res = re.sub('\d+', '我把数字替换了',

"cyx123456cyxxx123456") # 默认全部替换,当然也可以替换一次re.sub('\d+','我把数字替换了',"cyx123456cyxxx123456",1)

print(res) # --> cyx我把数字替换了cyxxx我把数字替换了

# subn 替换了并显示替换的次数

res = re.subn('\d+', '我把数字替换了', "cyx123456cyxxx123456")

print(res) # --> ('cyx我把数字替换了cyxxx我把数字替换了', 2)

# match 这个就相当与加了个^ (和search差不多) --> 主要用来规定这个字符号必须是什么样的

res = re.match('\d+', 'cyx123456cyxxx')

print(res) # --> None

res = re.match('\d+', '123cyx456cyxxx')

print(res.group()) # --> 123

# compile -- 节省代码的时间的工具

# 假如同一个正则表达式要被使用多次

# 节省了多次解析同一个正则表达式的时间

ret = re.compile("\d+")

res = ret.search("cyx12456cyxXX123")

print(res.group()) # --> 12456

# finditer --> 节省空间

ret = re.finditer("\d+", "cyx123456cyxxx125644")

for r in ret:

print(r.group()) # --> 123456

# 125644

# 怎么又节省时间又节省空间呢?

ret = re.compile('\d+')

res = ret.finditer("cyx222231fddsf45746sdf2123sdf56456sdf10123sdf123132sdf")

for r in res:

print(r.group())

"""

222231

45746

2123

56456

10123

123132

"""

# 分组命名(?P<组名>正则) (?P=组名)

# 有的时候我们要匹配的内容是包含在不想要的内容之中的,

# 只能先把不想要的内容匹配出来,然后再想办法从结果中去掉

# 分组命名的用法 (找两个组里面是一样的内容)

exp = 'asdasf54545645698asdasd00545sdfsdf'

ret = re.search('<(?P\w+)>.*?(?P=tag)', exp)

print(ret) # -- >

# exp2:

import re

ret = re.search('\d(\d)\d(\w+?)(\d)(\w)\d(\d)\d(?P\w+?)(\d)(\w)\d(\d)\d(?P\w+?)(\d)(\w)',

'123abc45678agsf_123abc45678agsf123abc45678agsf')

print(ret.group('name1')) # -- > agsf_123abc

print(ret.group('name2')) # -- > agsf

今日小思考

当我们有一个这样的列表:

lis = ['', 'z', 'c', 'asd', 'sdf', '', 'asd']

那么我们如何将里面的空字符删除呢?

ret = filter(lambda n: n, lis)

print(list(ret)) # --> ['z', 'c', 'asd', 'sdf', 'asd']

总结

到此这篇关于正则表达式+Python re模块详解的文章就介绍到这了,更多相关正则表达式 python re模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

python re正则_正则表达式+Python re模块详解相关推荐

  1. Python中下划线 _ 的最全用法详解

    Python中下划线 _ 的最全用法详解 '_'是什么? _在python中可以作为一个标识符,用于定义变量和方法唯一名称.同时它也是Python中的一个软关键字,指在某些特定上下文中保留的关键字.截 ...

  2. python bisect_Python实现二分查找与bisect模块详解

    前言 其实Python 的列表(list)内部实现是一个数组,也就是一个线性表.在列表中查找元素可以使用 list.index()方法,其时间复杂度为O(n) .对于大数据量,则可以用二分查找进行优化 ...

  3. python re模块详解_python与正则表达式:re模块详解

    re模块是python中处理正在表达式的一个模块 正则表达式知识储备:http://www.cnblogs.com/huamingao/p/6031411.html 1. match(pattern, ...

  4. Python 正则表达式使用--Re 模块详解

    目录 1. 常用正则表达式符号和特殊字符 ?2.? Re 模块:核心函数和方法 2.1 re.compile() 编译函数 2.1.1?re.compile() 语法格式 2.1.2?re.compi ...

  5. Python基础教程:线程操作(oncurrent模块)详解

    进程是cpu资源分配的最小单元,一个进程中可以有多个线程. 线程是cpu计算的最小单元. 对于Python来说他的进程和线程和其他语言有差异,是有GIL锁. GIL锁 GIL锁保证一个进程中同一时刻只 ...

  6. stat在python中_python os.stat() 和 stat模块详解

    stat 系统调用时用来返回相关文件的系统状态信息的. 首先我们看一下stat中有哪些属性: 正如你上面看到的,你可以直接访问到这些属性值. 好了,下面我来看看python中的stat模块,先看看自带 ...

  7. python回归算法_机器学习算法之回归详解

    导语 回归:从一组数据出发,确定某些变量之间的定量关系式:即建立数学模型并估计未知参数. 回归的目的是预测数值型的目标值,它的目标是接受连续数据,寻找最适合数据的方程,并能够对特定值进行预测.这个方程 ...

  8. python cx_oracle模块详解_cx_Oracle模块详解

    1.安装cx_Oracle模块 1-1.环境准备: 1-1-1.oracle client最小安装 instantclient-sqlplus-linux.x64-11.2.0.4.0 instant ...

  9. Nginx正则表达式之匹配操作符详解

    2019独角兽企业重金招聘Python工程师标准>>> Nginx正则表达式之匹配操作符详解 nginx可以在配置文件中对某些内置变量进行判断,从而实现某些功能.例如:防止rewri ...

最新文章

  1. Python 命令pip install pygame安装报错
  2. Java案例-用户注册邮箱绑定激活功能实现
  3. Magical Sticks 棍子拼接
  4. Android开发者指南(4) —— Application Fundamentals(二)
  5. 受 SQLite 多年青睐,C 语言到底好在哪儿?
  6. php json 美化,php JSON数据格式化(美化)的方法
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的健身房管理系统
  8. MFC的凸包实例【赶紧进来膜拜】
  9. 逆向工程平台 Radare2
  10. Android studio打包遇到的问题总结
  11. 用ASP.NET MVC自己管理自己的View:ASP.NET MVC File Management 【转】
  12. mysql8019zip安装_Eclipse+java+mysql8019实现数据库连接
  13. 简单实现滑动门效果css或js+css
  14. linux抓包及分析
  15. STM8S103FP6芯片PB_4/PB_5输出问题
  16. 【宋红康 MySQL数据库 】【高级篇】【10】索引的创建与删除_MySQL8.0的索引新特性
  17. 小米平板2 Windows刷回MIUI9线刷教程(2019)
  18. 经济学计算机会成本和贸易区直的题,管理经济学2017年4月真题(02628)
  19. 有了这些好看的流程图模板,你也可以画出漂亮的流程图
  20. 手机怎么打开f12_如何使用浏览器的F12调试页面?

热门文章

  1. 深入理解iPhone委托模式兼谈iPhone生命周期
  2. 【DP】LeetCode 53. Maximum Subarray
  3. LeetCode 103. Binary Tree Zigzag Level Order Traversal
  4. 【easy!】LeetCode 14. Longest Common Prefix
  5. 关于滑动窗口的小小小tip
  6. win10 上用anaconda创建pytorch环境
  7. pattern recognition letter 投稿时word 模板的说明乱码
  8. 【何之源-21个项目玩转深度学习】——Chapter3-3.2 数据准备-将图像数据转为tfrecord形式
  9. B. A and B and Compilation Errors
  10. django动态HTML转PDF方法