引入模块:

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. windows安装程序制作

    作为一个学计算机的,现在才知道那些安装软件都是用软件封装工具封装起来的. 我们写好exe以后可以下载一个Inno setup5 对其打包成可安装的软件,期间可加入图标,readme,等等一些东西.

  2. Nginx1.8源码包编译安装

    1.下载解压Nginx,为方便管理下载包一般将下载包放在指定目录下 ,即/usr/local/src/下. wget http://nginx.org/download/nginx-1.8.0.tar ...

  3. ugui拖拽

    整理了下以前写的 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityE ...

  4. [转帖]Intel Xeon路线图:7nm处理器要上DDR5、PCIe 5.0

    Intel Xeon路线图:7nm处理器要上DDR5.PCIe 5.0 https://www.cnbeta.com/articles/tech/849631.htm 在月初的投资者会议上,Intel ...

  5. IDEA在resources下创建多级目录

    在resource下,创建多级目录,应在每个目录之间用"/"隔开,这样就不需要再手动一层层目录的分别添加了!

  6. Simpsons’ Hidden Talents

    Homer: Marge, I just figured out a way to discover some of the talents we weren’t aware we had. Marg ...

  7. swtich和case语句中,定义变量要加花括号

    转自: http://blog.chinaunix.net/uid-27103408-id-3340702.html http://www.xuebuyuan.com/2070170.html swi ...

  8. mongodb启动报错,child process failed, exited with error number 1

    error: child process failed, exited with error number 1 第一次安装mongodb,随后启动一般不会出现上面的错误,出现这种错误的原因一般是mon ...

  9. git分支/标签操作

    git分支类似于某一个模块,等到所有模块开发完毕时,最后聚合在一起形成一个项目.而分支之间一般是不会受影响的. git 分支的基本操作: git branch branchname 表示创建分支,新建 ...

  10. 【问题解决方案】Linux中命令useradd与adduser的区别

    参考链接: useradd与adduser的区别 useradd与adduser:创建新的用户 CentOs: useradd与adduser是没有区别的 都是在创建用户,在home下自动创建目录,没 ...