re模块及其用法
一、re模块下的常用方法
首先在使用re模块之前,需要引入re模块
import re
1.与查找相关的:
1.findall 返回列表,找到所有的匹配项
ret = re.findall("\d+","asda132eqwe啊阿达456")
print(ret)
# ['132', '456']
2.search 匹配从左到右第一个符合,返回一个变量,通过group方法取到值,没有匹配到就会返回None,使用group会报错。
ret = re.search("\d+","asda132eqwe啊阿达456")
print(ret.group())
#
ret = re.search("\d+","asdaeqwe啊阿达")
print(ret.group())
#AttributeError: 'NoneType' object has no attribute 'group'
3.match 相当于在search的正则表达式中加了一个“^”
2.与字符串处理相关的;
1.spilt 返回列表,按照正则规则切割,默认匹配到的内容会被切割掉。
ret = re.split("\d+","asd23sadasd90dasdasd809asd89") #(\d+)可以把切割掉的保留下来
print(ret)
# ['asd', 'sadasd', 'dasdasd', 'asd', '']
2.sub、subn 替换,按照正则规则去寻找要被替换的内容,subn返回元组,第二个值是替换的次数。
ret = re.sub("\d+","H","asd23asd34455asd55")
print(ret)
# asdHasdHasdH
ret = re.subn("\d+","H","asd23asd34455asd55")
print(ret)
# ('asdHasdHasdH', 3)
3.re模块的进阶:时间\空间
1.compile 编译一个正则表达式,用这个结果去search match findall finditer 能节省时间,不用每次使用的时候再去编译了。
ret = re.compile("\d+")
res = ret.findall("asd23asd34455asd55")
print(res)
res = ret.search("asd23asd34455asd55")
print(res.group())
2.finditer 返回一个迭代器,所有的结果都在这个迭代器中,需要通过循环+group的形式取值 能够节省内存。
res = re.finditer("\d+","asd23asd34455asd55")
print(res)
for i in res:
print(i.group())
二、分组在re模块中的使用
s = '<a>wahaha</a>'
ret = re.search("(>)(\w+)(<)",s)
print(ret.group()) #不加参数,默认是匹配所有结果
print(ret.group(1)) #数字参数表示的是取对应分组中的内容
print(ret.group(2))
print(ret.group(3))
ret = re.findall(">(\w+)<",s)
print(ret)
#['wahaha']
#为了findall也可以顺利取到分组中的内容,有一个特殊的语法,就是优先显示分组中的内容
ret = re.findall('\d+(?:\.\d+)?','1.234*4')
print(ret)
#['1.234', '4']
#如果按照优先显示,那么结果就不是想要的。所以在括号中加入"?:"就可以取消分组优先,还不会破坏原本的正则表达式。
ret = re.split('(\d+)','alex83taibai40egon25aa')
print(ret)
#['alex', '83', 'taibai', '40', 'egon', '25', 'aa']
#用split切割后消失的部分,可以用()将正则规则括起来,这样就能得到切割掉的部分
s = '<a>wahaha</a>'
ret = re.search(">(?P<com>\w+)<",s)
print(ret.group(1))
print(ret.group("com"))
#wahaha
#wahaha
#可以通过在分组中加入"?P<name>",来对这个分组命名,在group给参数时可以给这个组的名字。
#使用前面的分组,要求使用这个名字的分组和前面同名分组中的内容匹配必须一致
s = '<a>wahaha</a>'
ret = re.search("<(?P<tag>\w+)>(\w+)</(?P=tag)>",s)
print(ret.group())
#<a>wahaha</a>
re模块及其用法的更多相关文章
- json模块和pickle模块的用法
在python中,可以使用pickle和json两个模块对数据进行序列化操作 其中: json可以用于字符串或者字典等与python数据类型之间的序列化与反序列化操作 pickle可以用于python ...
- python之模块py_compile用法(将py文件转换为pyc文件)
# -*- coding: cp936 -*- #python 27 #xiaodeng #python之模块py_compile用法(将py文件转换为pyc文件):二进制文件,是由py文件经过编译后 ...
- 百万年薪python之路 -- socket()模块的用法
socket()模块的用法: import socket socket.socket(socket_family,socket_type,protocal=0) socket_family 可以是 A ...
- Python的logging模块基本用法
Python 的 logging 模块的简单用法 在服务器部署时,往往都是在后台运行.当程序发生特定的错误时,我希望能够在日志中查询.因此这里熟悉以下 logging 模块的用法. logging 模 ...
- python学习第四十九天XML模块的用法
xml是实现不通语言或程序之间进行数据交换的协议,跟json差不多,但是json用起来简单,还没诞生json,以前都是用xml,下面讲述XML模块的用法. 1,导入xml模块 import xml 2 ...
- python pickle模块的用法
pickle用于python特有的类型,和python的数据类型间进行转换,提供四个功能 dumps,dump,loads,load. pickle 的用法 #pickle.dumps 将数据通过特殊 ...
- 博客管理与文章发布系统-第三方模块及其用法Part1
写个帖子记录一下自己写的第一个express完整项目. 所需第三方模块及其用法. 一.先把所需文件和准备工作写一下 写项目前的准备 1.创建所需文件夹 public 静态资源 model 数据库操作 ...
- argparse模块基本用法
argparse模块基本用法 在 python 编写的程序中,我们经常会看到的 argparse 相关代码,而它究竟怎么使用呢?接招! argparse 是一个命令行参数解析模块 现在提出需求,我需要 ...
- python中ConfigParse模块的用法
ConfigParser 是Python自带的模块, 用来读写配置文件, 用法及其简单. 配置文件的格式是: [...]包含的叫section section 下有option=value这样的键值 ...
- python OptParse模块的用法详解
OptParse模块的简单介绍 Python 有两个内建的模块用于处理命令行参数: 一个是 getopt只能简单处理 命令行参数: 另一个是 optparse,它功能强大,而且易于使用,可以方便地生成 ...
随机推荐
- SQL命令如何分发到集群的各节点
有些数据库集群的规模是很大的,有上百个节点,那么维护SQL命令如何快速分发给各个节点,例如:要加个字段,逐个节点操作那是十分低效,枯燥的. TreeSoft增加了[SQL分发]功能,简单配置,可以快速 ...
- dockerui 安装
meiya@meiya:~$ docker pull abh1nav/dockerui Using default tag: latest latest: Pulling from abh1nav/d ...
- 在ensp上配置通过Stelnet登录系统
我们为什么我们要采用Stelent登录? 因为不安全,我们要采用更加安全的方式,双向加密,通过ssh网络安全协议 下面我们开始实验:使用路由器R1模拟PC,作为SSH的客户端:路由器R2作为SSH的服 ...
- input 标签鼠标放入输入框补全提示
JSP: <input type="text" placeholder="eventDesc" value="" id="e ...
- kafka那些事儿
1 为什么用消息队列 1)解耦.服务之间没有强依赖,不需要关心调用服务时出现的各种异常,服务挂掉后接口超时等问题 2)异步.解决接口调用多服务时延时高的问题 3)高峰期服务间缓冲.解决工作节奏不一致问 ...
- [VS] - Visual Studio 智能感知无法启用 之解决
背景 VS 2017 智能感知无法使用,重置 "导入和导出设置..." 后仍无法使用. 解决 我在 VS 上安装了 Resharper 的,猜测可能跟其配置有关,重置 Intell ...
- 在Asp.Net Core中集成Kafka(中)
在上一篇中我们主要介绍如何在Asp.Net Core中同步Kafka消息,通过上一篇的操作我们发现上面一篇中介绍的只能够进行简单的首发kafka消息并不能够消息重发.重复消费.乐观锁冲突等问题,这些问 ...
- Mybatis笔记4
mybatis中多对多的步骤 示例:用户和角色,一个用户可以有多个角色,一个角色可以赋予多个用户 步骤: 建立两张表:用户表,角色表,让用户表和角色表具有多对多的关系,需要使用中间表,中间表中包含两张 ...
- Mybatis笔记2
使用Mybatis完成的CRUD操作 个人总结的一些小规律 学习过程中碰到的错误: org.apache.ibatis.exceptions.PersistenceException: ### Err ...
- stm32之中断响应优先级
1)中断响应分为:自然优先级.抢占优先级.响应优先级. 2)抢占优先级和响应优先级,其实是一个中断所包含的两个优先级,其中前者是抢占优先级之间的级别划分,后者是相同抢占优先级的优先级别的划分. 中断A ...