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 ...
随机推荐
- 【Spark机器学习速成宝典】基础篇01Windows下spark开发环境搭建+sbt+idea(Scala版)
注意: spark用2.1.1 scala用2.11.11 材料准备 spark安装包 JDK 8 IDEA开发工具 scala 2.11.8 (注:spark2.1.0环境于scala2.11环境开 ...
- var $this = $(this)
jQuery: What’s the Difference Between $(this), $this, and this? What about $this? $this is a little ...
- 从txt导入数据到mysql
当要往mysql的table中录入数据量大的时候,直接从txt录入已有数据是一个愉快的选择. 在录入数据前要做一些格式上的准备 1. txt编码要是utf-8,无BOM 2. 每行以\t\n结尾,每列 ...
- 配置Toad链接远程Oracle数据库
当前环境: 本机系统:Win7 64位 Toad版本:11 32位 数据库:Oracle 10g =================================== 与PLSQL Develope ...
- 因修改/etc/ssh权限导致的ssh不能连接异常解决方法
因修改/etc/ssh权限导致的ssh不能连接异常解决方法 现象: $ssh XXX@192.168.5.21 出现以下问题 Read from socket failed: Connection r ...
- linux系统下 android studio的 Terminal 中 执行 gradlew命令找不到
错误显示: 原因是linux系统中优先查找的是PATH环境中的程序,并不是当前目录下,执行当前目录下的程序要加上./. 这个错误很明白了,没有gradlew的执行权限.可以ls -al查看下gradl ...
- SSH整合项目----在线商城
1.1 网上商城需求分析 1.1.1 前台:用户模块. 注册: * JS非空校验.(不是必须) * Struts2数据校验:在注册Action类同一包下新建UserAction-user_reg ...
- python-unittest模块中的各类断言
unittest中断言主要有三种类型: 基本的布尔断言,即:要么正确,要么错误的验证 比较断言,如比较两个变量的值(跟上面的布尔断言区别不大,主要是通过比较两个变量的值得出布尔值) 复杂断言(一般用的 ...
- mnist数据集下载——mnist数据集提供百度网盘下载地址
mnist数据集是由深度学习大神 LeCun等人制作完成的数据集,mnist数据集也常认为是深度学习的“ Hello World!”. 官网:http://yann.lecun.com/exdb/mn ...
- djangourl进阶