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 ...
随机推荐
- SpringMVC学习记录(六)--Validator验证
一.基于Validator接口的验证. 首先创建User实例,并加入几个属性 public class User { private String username; private String p ...
- D2下午
前言 至于为什么D2要分上下午,唯一的原因就是lyd那个毒瘤用了一上午讲他昨天要讲的鬼畜东西,所以今天下午才开始讲数论了 对了,补一下lyd的数论人 <数论人>(大雾) 数论的光束是歌德巴 ...
- react native props上存在的属性,显示不存在
问题:类型“Readonly<{}> & Readonly<{ children?: ReactNode; }>”上不存在属性“navigation”.ts(2339) ...
- Windows下配置DVWA
VWA是用PHP+MySQL编写的一套用于常规Web漏洞教学和检测的Web脆弱性测试程序,包含了SQL注入.XSS.盲注等常见的一些安全漏洞,是一个非常好的网络安全实验平台. 环境配置比较简单, 步骤 ...
- 阶段3 2.Spring_06.Spring的新注解_3 AnnotationConfigApplicationContext的使用
目前这个配置文件除了导约束就没有其他的内容了. 删除这个bean.xml文件 但是测试类里面还是读取的xml的信息 注解 查看ApplicationContext的 关系图 查看实现类的实现类 之前我 ...
- 四十九:数据库之Flask-SQLAlchemy下alembic的配置
准备工作 配置数据 创建迁移文件并映射到数据库 增加字段 删除字段
- C#代码获取另一程序的错误提示,并关闭窗口。
A程序报错弹框如下: B程序捕捉到此错误消息,并关闭.B程序核心代码如下. private void timer_Click(object sender, EventArgs e) { //查找Mes ...
- JS对象—数组总结(创建、属性、方法)
JS对象—数组总结(创建.属性.方法) 1.创建字符串 1.1 new Array() var arr1 = new Array(); var arr2 = new Array(6); 数组的长度为6 ...
- JS点击img图片放大再次点击缩小JS实现 简单实用Ctrl+C+V就可以用
业务需要,从后台获取的图片列表,用img标签展示,用户需要查看大图.记录下来以便学习和参考.示例图如下: 放大之前: 放大之后: 点击后放大(由于图片高度超出了页面,需要通过overflow:auto ...
- cocos2dx基础篇(5) 按钮
这篇是直接复制的别人的,太多了,难得写... [本节内容] CCMenu.CCMenuItem其具体的六个子类 [菜单CCMenu] 菜单CCMenu是用来装载菜单按钮的图层,图层中的子节点只能够是菜 ...