python中的正则表达式的使用
一、正则表达式简介
正则表达式的官方文档:https://www.runoob.com/regexp/regexp-tutorial.html
正则表达式:又称正规表示式、正规表示法、正规表达式、规则表示式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或者是RE),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列某个句法规则的字符串。在很多文本编辑器里,正则表达式通常来检索、替换那些匹配某个模式的文本。
按某种规则匹配的表达式。
二、正则介绍
正则表达式是一个工具,用于匹配字符串,或用来提取字符串。
1、判断一个字符串是否匹配给定的格式(判断用户账号是否满足格式)
2、从字符串中,按指定格式提取信息(抓取手机号)
import re
str1 = 'fijiooe18814726275iufdrrrrdf18814726275fsdssa'
# 定义一个查找的规则
# 已知需要查找的手机号
p = ''
# search(): 从前往后查找数据,默认返回找到的第一个数据,不会再继续往后面找
res = re.search(p,str1).group()
print(res)
三、元字符
表示单字符
字符 | 功能 |
. | 匹配任意一个字符(除了\n) |
[] | 匹配[]中列举的字符 |
\d | 匹配数字,即0-9 |
\D | 匹配非数字,即不是数字 |
\s | 匹配空白,即空格,tab键 |
\S | 匹配非空白 |
\w | 匹配单词字符,即a-z、A-Z、0-9、_ |
\W | 匹配非单词字符 |
表示数量
匹配多个字符的相关格式。
字符 | 功能 |
* | 匹配前一个字符出现0次或者无限次,即可有可无 |
+ | 匹配前一个字符出现1次或者无限次,即至少有1次 |
? | 匹配前一个字符出现1次或者0次,即要么有1次,要么没有 |
{m} | 匹配前一个字符出现m次 |
{m,} | 匹配前一个字符至少出现m次 |
{m,n} | 匹配前一个字符至少出现m~n次 |
表示边界
字符 | 功能 |
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
\b | 匹配一个单词的边界 |
\B | 匹配非单词边界 |
匹配分组
字符 | 功能 |
| | 匹配左右任意一个表达式 |
(ab) | 将括号中字符作为一个分组 |
\num | 引用分组num匹配到的字符串 |
(?P<name>) | 分组起别名 |
(?P=name) | 引用别名为name分组匹配到的字符串 |
四、re模块
re.match函数
re.match函数尝试从字符串的起始位置匹配一个模式,匹配成功,返回的是一个匹配对象(这个对象包含了匹配的信息,如果不是起始位置匹配成功的话,match()就会返回None。)
re.search方法
re.search()扫描整个字符串并返回第一个成功匹配到的字符。
re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回为None;而re.search匹配整个字符串,直到找到一个匹配
findall方法
在字符串中找到正则表达式所匹配的所有子串,并以列表的形式进行返回,如果没有找到匹配的。则返回来一个空列表。
注意:match和search 是匹配一次;而findall是匹配所有。
sub方法
替换字符串中的某些字符,可以用正则表达式来匹配被选子串。
re.sub(pattern,repl,string,count=0)
- pattern :表示正则表达式中的模式子串;
- repl:被替换的字符串(既可以是字符串,也可以是函数)
- string:要被处理的字符串,要替换的字符串
- count:替换的次数
str4 = '1#python#232th32#python#uedue#python#oyfdsthdsaastrtn'
# ()将括号中的字符作为一个分组
p17 = 'py(th)on'
res1 = re.search(p16,str4)
print(res1) res2 = re.search(p16,str4).group(1)
print(res2) # 匹配一个任意字符,出现一次以上且关闭贪婪模式
p18 = '#.+?#'
res3 = re.findall(p18,str4)
print(res3) p19 = '#(.+?)#'
res4 = re.findall(p19,str4)
print(res4) # 替换str4字符串中的p19为'*java*'字符串,count来控制替换的次数
res5 = re.sub(p19,'*java*',str4)
print(res5)
五、贪婪模式
python中数量词默认是贪婪模式,总是尝试匹配尽可能多的字符;非贪婪模式相反,总是尝试匹配尽可能少的字符。
在 *、?、+、{m,}、{m,n}后面加上?,可以使贪婪模式变成非贪婪模式。
练习
import re
str1 = 't fijiooe18 71%^&&@#@47262 75i_ufdrrrrdf1 _8814726 275fsd ssa' # 定义一个查找的规则
# 已知需要查找的手机号
p1 = ''
# 匹配11位数字的手机号码
p2 = '\d{11}'
# 匹配手机号码
p3 = '1[3-9]\d{9}'
# 匹配非数字
p4 = '\D{2}'
# 匹配空格
p5 = '\s'
# 匹配非空格
p6 = '\S'
# 匹配单次字符,即A-Z、a-z、0-9、_
p7 = '\w'
# 匹配非单次字符,即除A-Z、a-z、0-9、_以外的字符
p8 = '\W'
# 匹配任意字符
p9 = '.' # search(): 从前往后查找数据,默认返回找到的第一个数据,不会再继续往后面找
res = re.search(p1,str1)
print(res) # findall() :找出所有符合规范的字符,以列表形式返回。
res = re.findall(p1,str1)
print(res) # 正则表达式:默认是贪婪模式,贪婪模式是尽可能取最多的值。
p10 = '\d{3,5}'
# 关闭贪婪模式:用? 尽可能取最少的值
p11 = '\d{3,5}?' # 注意:匹配规则中涉及到数量范围的时候,会出现贪婪模式。如 {m,} {m,n} * + # 表示边界的
str2 = '1python23232 python uedu python oy fdsd saas python'
# ^ 表示匹配字符串开头
p12 = '^py'
res1 = re.search(p12,str2)
res2 = re.findall(p12,str2)
print(res1,res2) # $ 表示字符串结尾
p13 = 'python$'
res1 = re.search(p13,str2)
res2 = re.findall(p13,str2)
print(res1,res2) # \b 匹配单词边界
p14 = r'\bpy'
res1 = re.search(p14,str2)
res2 = re.findall(p14,str2)
print(res1,res2) # \B 匹配非单词边界
p15 = '\Bpy'
res1 = re.search(p15,str2)
res2 = re.findall(p15,str2)
print(res1,res2) # 匹配分组
str3 = '1python232th32 python uedu eepython oy fdsthd saas trtython'
# ()将括号中的字符作为一个分组
p16 = 'py(th)on'
res1 = re.search(p16,str3)
res2 = re.findall(p16,str3)
print(res1,res2)
六、封装一个自己的正则表达式的类
封装的需求:替换测试用例中的参数
简化参数替换的流程
封装的思路:1、获取测试用例数据
2、判断该条测试用例数据是否有需要替换的参数
3、调用封装好的正则表达式类进行参数替换
import re
from common.config import conf
def replace(data):
"""
用来替换测试用例的参数
:param data: 用例的参数
:return:
"""
p = r'#(.+?)#'
# 判断测试用例中的参数是否替换
while re.search(p,data):
# 查找配置文件中需要替换的测试用例参数
key = re.search(p,data).group(1)
value = conf.get('test_data',key)
# 替换测试用例数据参数
data = re.sub(p,value,data,count=1)
return data
python中的正则表达式的使用的更多相关文章
- Python::re 模块 -- 在Python中使用正则表达式
前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...
- 在Python中使用正则表达式同时匹配邮箱和电话并进行简单的分类
在Python使用正则表达式需要使用re(regular exprssion)模块,使用正则表达式的难点就在于如何写好p=re.compile(r' 正则表达式')的内容. 下面是在Python中使用 ...
- python模块 re模块与python中运用正则表达式的特点 模块知识详解
1.re模块和基础方法 2.在python中使用正则表达式的特点和问题 3.使用正则表达式的技巧 4.简单爬虫例子 一.re模块 模块引入; import re 相关知识: 1.查找: (1)find ...
- Python学习-38.Python中的正则表达式(二)
在Python中,正则表达式还有较其他编程语言有特色的地方.那就是支持松散正则表达式了. 在某些情况,正则表达式会写得十分的长,这时候,维护就成问题了.而松散正则表达式就是解决这一问题的办法. 用上一 ...
- Python学习-37.Python中的正则表达式
作为一门现代语言,正则表达式是必不可缺的,在Python中,正则表达式位于re模块. import re 这里不说正则表达式怎样去匹配,例如\d代表数字,^代表开头(也代表非,例如^a-z则不匹配任何 ...
- [Python]网络爬虫(七):Python中的正则表达式教程
转自:http://blog.csdn.net/pleasecallmewhy/article/details/8929576#t4 接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一 ...
- [Python]网络爬虫(七):Python中的正则表达式教程(转)
接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一下Python中的正则表达式的相关内容. 正则表达式在Python爬虫中的作用就像是老师点名时用的花名册一样,是必不可少的神兵利器. ...
- 在python中使用正则表达式(转载)
https://www.cnblogs.com/hanmk/p/9143514.html 在python中使用正则表达式(一) 在python中通过内置的re库来使用正则表达式,它提供了所有正则表 ...
- python中的正则表达式(re模块)
一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎 ...
- python中关于正则表达式三
2015年8月14日 11:10 7.2正则表达式操作 正则表达式使用反斜杠字符'\'来暗示一些特殊的形式或者允许特殊的字符使用但是没有调用它们特殊的意思.在字符串常量中的相同目标的字符的python ...
随机推荐
- 正则表达式中常用的模式修正符有i、g、m、s、x、e详解
正则表达式中常用的模式修正符有i.g.m.s.x.e等.它们之间可以组合搭配使用. 它们的作用如下: //修正符:i 不区分大小写的匹配; //如:"/abc/i"可以与abc或a ...
- 选择company回显appname
function showSupCompany() { var obj = {}; obj.label = ScompanyId.getSelectedLabel(); obj.value = Sco ...
- T84341 Jelly的难题1
T84341 Jelly的难题1 题解 当窝发现窝的锅在读入这个矩阵的时候,窝..窝..窝.. 果然,一遇到和字符串有关的题就开始吹空调 好啦我们说说思路吧 BFS队列实现 拿出一个没有走过的点,扩展 ...
- 三十四:数据库之SQLAlchemy外建及四种约束
使用SQLAlchemy创建外建,只需要在子表的字段中指定此字段的外建是哪个表的哪个字段即可,字段类型需和父表下该字段的类型保持一致 使用ondelete指定约束, 外建约束有以下几种:1.RESTR ...
- iOS多选实现注意点
下面对APP的多选选择列表实现进行总结,为了在以后的每个项目的多选实现,测试总是提一样的bug总结的. 具体的实现代码就不复制粘贴了,不过在多选问题上遇到问题的可以我们一起讨论讨论的哈... 可能总结 ...
- WebSocket-Node
WebSocket Client & Server Implementation for Node 参考资料:[https://github.com/theturtle32/WebSocket ...
- FPGA VGA时序的理解
最近在做FPGA毕业设计,毕业设计规划的是摄像头采集图像,经过均值滤波,中值滤波,高斯滤波,然后通过VGA接口控制显示器显示出来,所以最近学习了一下FPGA的VGA驱动的相关内容. VGA接口 如上图 ...
- mariadb数据库基础
1.数据库介绍 简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据 ...
- 【Ruby on Rails 学习三】Ruby 基本数据类型(类、类的实例、对象)
数字.文本.范围.符合.True.False.Nil 1为什么是一个类的对象,使用methods方法可以查看一个对象的所有函数(方法) $ irb irb(main)::> => irb( ...
- 第七周课程总结&实验报告
课程总结 主要学习了抽象类与接口的应用 1.抽象类的成员可以具有访问级别 接口的成员全部public级别 2.抽象类可以包含字段 接口不可以 3.抽象类可以继承接口 接口不能继承抽象类 4.抽象类的成 ...