引入模块:

import re

1.查找
findall   匹配所有,每一项都是列表中的一个元素

ret=re.findall("\d+","sjkhk172按实际花费928")
print(ret)
['172', '928']

search  只匹配从左到右的第一个,得到的不是结果,而是一个变量,通过这个变量的group方法来获取结果。

ret=re.search("\d+","sjkhk172按实际花费928")
print(ret)
print(ret.group()) <_sre.SRE_Match object; span=(5, 8), match=''>
172
ret=re.search("\d+","sjkhk172按实际花费928")

if ret:#内存地址,这是一个正则的匹配结果
print(ret.group())#获取真正的结果 172

match  从头开始匹配,相当于search中的正则表达式加上一个^

ret=re.match("\d+$",'172sjkhk按实际花费928')
print(ret) None
ret=re.match("\d+",'172sjkhk按实际花费928')
print(ret)
print(ret.group()) <_sre.SRE_Match object; span=(0, 3), match='172'>
172
 

字符串处理的扩展:切割、替换

split  切割

s = 'alex83taibai40egon25'
# ret = re.split('\d+',s)
# print(ret) ['alex', 'taibai', 'egon', '']

sub  替换 旧的   新的   替换次数

ret = re.sub('\d+','h','alex83taibai40egon25',2)
print(ret) alexhtaibaihegon25

subn  返回一个元组,返回的第二个元素是替换的次数

ret = re.subn('\d+','H','alex83taibai40egon25')
print(ret) ('alexHtaibaiHegonH', 3)

re模块的进阶    时间  空间

compile   节省使用正则表达式解决时间问题   把正则表达式编译成字节码,在以后的多次使用过程中不会多次编码

ret=re.compile("\d+")
res=ret.findall("alex83taibai40egon25")
print(res)
['83', '40', '25']
res=ret.search("sjkhk172按实际花费928")
print(res.group())
172

finditer  节省正则表达式解决问题的内存或者空间

返回一个迭代器,所有的结果都在这个迭代器中,需要通过循环+group的形式取值 能够节省内存
ret=re.finditer("\d+","alex83taibai40egon25")
for i in ret:
print(i.group()) 83
40
25

分组在ret模块下的使用

s = '<a>wahaha</a>'  # 标签语言 html 网页
ret = re.search('<(\w+)>(\w+)</(\w+)>',s)
print(ret.group()) # 所有的结果
print(ret.group(1)) # 数字参数代表的是取对应分组中的内容
print(ret.group(2))
print(ret.group(3)) <a>wahaha</a>
a
wahaha
a
s = '<a>wahaha</a>'
ret=re.findall('(\w+)',s )
print(ret)
ret=re.findall('>(\w+)<',s)
print(ret) ['a', 'wahaha', 'a']
['wahaha']
为了findall也可以顺利取到分组中的内容,有一个特殊的语法,就是优先显示分组中的内容
# 取消分组优先(?:正则表达式)
ret = re.findall('\d+(\.\d+)?','1.234*4')
print(ret)
['.234', '']
# 分组命名 (?P<这个组的名字>正则表达式)
# s = '<a>wahaha</a>'
# ret = re.search('>(?P<con>\w+)<',s)
# print(ret.group(1))
# print(ret.group('con'))
使用前面的分组 要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致
精准的取到整数 过滤掉小数

ret=re.findall(r"\d+\.\d+|\d+","1-2*(60+(-40.35/5)-(-4*3))")
print(ret)
ret=re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*3))")
ret.remove('')
print(ret) ['', '', '', '40.35', '', '', '']
['', '', '', '', '', '']

re模块下的的常用方法的更多相关文章

  1. Flex4分模块下样式动态加载步骤及相关问题的解决

    1.  给应用程序编写CSS文件 (1)在项目下创建CSS文件(任意路径,可以多个).本例在src下创建了5个样式文件 (2)Flex支持的CSS文件定义如下: a)  type selector(类 ...

  2. thinkphp6.0 多应用模块下提示控制器不存在

    thinkphp6.0 多应用模块下提示控制器不存在 在项目根目录下使用Composer composer require topthink/think-multi-app 参考链接

  3. re模块下的常用方法

    一  :  re模块的查找 findall  优先级查找  返回列表 找所有的匹配项(从大段的内容中找匹配到的项目) import re str = "qwer asdf zxcv qwer ...

  4. os和sys模块的区别及其常用方法总结

    官方解释:os: This module provides a portable way of using operating system dependent functionality. 翻译:提 ...

  5. python学习笔记五 模块下(基础篇)

    shevle 模块 扩展pickle模块... 1.潜在的陷进 >>> import shelve>>> s = shelve.open("nb" ...

  6. phpcms v9 源码解析(4)content模块下的index.php文件的init()方法解析

    在了解index.php中的init函数的时候,让我们先看看最开始的几行代码 1-5  第二行, defined('IN_PHPCMS') or exit('Nopermission resource ...

  7. “死锁” 与 python多线程之threading模块下的锁机制

    一:死锁 在死锁之前需要先了解的概念是“可抢占资源”与“不可抢占资源”[此处的资源可以是硬件设备也可以是一组信息],因为死锁是与不可抢占资源有关的. 可抢占资源:可以从拥有他的进程中抢占而不会发生副作 ...

  8. 摘要算法---hashlib模块下MD5和SHA的使用

    作用: 任意长度的字符串内容通过摘要算法都可以生成唯一序列摘要值,通过摘要算法,可以校验某个文档或者某组字符串是否被修改. 应用: 1.文件内容一致性校验 2.用户登录验证 常用方法 update() ...

  9. Yii2访问自定义模块下的controller

    之前,由于所要访问的controller都是位于根目录下的controllers目录下,就像下面这样: 此时,我们可以直接通过 localhost/basic/web/index.php?r=dao/ ...

随机推荐

  1. linux(centOS7)的基本操作(一) 概述

    linux服务器的连接 1.连接 window环境下需要安装XShell.XFtp等软件,暂时不表: macOS环境下直接用ssh命令登录即可,用以下任意一种 ssh [-p port] userna ...

  2. 子系统kali安装桌面

    理论上讲,所有Win10的Linux子系统都可以通过Windows10本机远程桌面和Xming的方法来安装使用图形化界面,笔者目前只接触了Debian系的Linux系统,故以Debian GNU/Li ...

  3. python学习笔记:(五)列表与元组的异同

    在python中最基本的数据结构是序列(sequence),每一个元素被分配一个序号,即元素的位置,也称为索引,第一个索引是0,第二个则是1 元组与列表最大的区别就是: 元组不能更改:列表可以修改 p ...

  4. 【疑难杂症】Firefox 火狐浏览器 关闭到 http://detectportal.firefox.com 的流量

    日期:2019-07-18 00:02:58 作者:Bay0net 介绍: 0x01. 问题描述 火狐浏览器的时候,抓包会出现很多这样的数据包.  具体的 URL http://detectport ...

  5. Java内存管理和回收

    转载自http://blog.csdn.net/cutesource/article/details/5906705 JVM内存组成结构 JVM栈由堆.栈.本地方法栈.方法区等部分组成,结构图如下所示 ...

  6. postfix无法启动问题

    open /etc/postfix/main.cf comment out inet_interfaces: all add inet_protocol: ipv4

  7. Miller-Robin 素数测试法 模板

    测试单个素数,出错概率比计算机本身出错的概率还要低 算法是基于费马小定理(format),二次探测定理(x*x % p == 1 ,若P为素数,则x的解只能是x = 1或者x = p - 1)加上迭代 ...

  8. Qt 遍历不规则树的节点

    在使用Qt的GraphicsScene作图时,遇到类似这样的需求:在scene中创建节点类似下图, 现在我要把每个节点的txt保存到xml文件中,结构为 <?xml version='1.0' ...

  9. gcc编译工具生成动态库和静态库

    一. 库的分类 1.1. 静态库(.a) 1.1.1. 静态库的代码在编译过程中已经被载入可执行程序,因此体积比较大.所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 1. ...

  10. ARM之cache

    一. 什么是cache 1.1. cache简介 a. Cache 即高速缓冲存储器,是位于 CPU 与内存之间的高速存储器,它的容量比内存小但交换速度快. b. ARM处理器的主频为上百M甚至几G, ...