python自动化之re模块详解
作者:FamilyYan 发布时间:2021-07-01 19:34:16
一、re是什么?
正则表达式是一个特殊的字符序列,能方便的检查一个字符串是否与某种模式匹配。re模块使得python拥有全部的正则表达式功能。
二、re 模块的作用
通过使用正则表达式,可以:
测试字符串内的模式。—— 例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
替换文本。—— 可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
基于模式匹配从字符串中提取子字符串。—— 可以查找文档内或输入域内特定的文本。
三、re模块的使用
1、常用方法
findAll():
匹配所有的字符串,把匹配结果作为一个列表返回match():
匹配字符串的开始位置,如果开始位置没有,则返回Nonesearch():
在字符串中搜索,返回搜索到的第一个finditer():
匹配所有的字符串,返回迭代器
2、 元字符
匹配任意字符(除\n以外) h. 代表匹配h后的任意一个字符
import re
res = 'h.'
s = 'hello python'
result = re.findall(res, s)
print(result) # ['he', 'ho']
[] 拿[]中的人任意一个字符,去字符串中匹配,匹配到一个返回一个,最后以列表返回
import re
res2 = '[hon]'
s = 'hello python'
result = re.findall(res2, s)
print(result) # ['h', 'o', 'h', 'o', 'n']
\d 匹配数字0-9
import re
res2 = '[\d]'
s = 'hell666o pyt999hon'
result = re.findall(res2, s)
print(result) # ['6', '6', '6', '9', '9', '9']
\D 匹配非数字, 包含空格
import re
res2 = '[\D]'
s = 'hello 3334 python 88'
result = re.findall(res2, s)
print(result) # ['h', 'e', 'l', 'l', 'o', ' ', ' ', 'p', 'y', 't', 'h', 'o', 'n', ' ']
‘\s’ 匹配空白字符
import re
res2 = '[\s]'
s = 'hello 3334 python 88'
result = re.findall(res2, s)
print(result) # [' ', ' ', ' ']
‘\S’ 匹配非空白字符
import re
res2 = '[\S]'
s = 'hello 3334 python 88'
result = re.findall(res2, s)
print(result) # ['h', 'e', 'l', 'l', 'o', '3', '3', '3', '4', 'p', 'y', 't', 'h', 'o', 'n', '8', '8']
\w 匹配非特殊字符,即a-z、A-Z、0-9、_、汉字
import re
res2 = '[\w]'
s = 'hello#&_ aa 8python中国'
result = re.findall(res2, s)
print(result) # ['h', 'e', 'l', 'l', 'o', '_', 'a', 'a', '8', 'p', 'y', 't', 'h', 'o', 'n', '中', '国']
\W 匹配特殊字符 ( - ~@#$&*)空格也属于特殊字符
import re
res2 = '[\W]'
s = '-hello#&_ aa 8python中国'
result = re.findall(res2, s)
print(result) # ['-', '#', '&', ' ', ' ']
3、多字符匹配
(1)*:匹配前一个字符出现一次,或无限次 贪婪模式
import reres2 = 'h*'s = '-hhello hhh python'result = re.findall(res2, s)print(result) #['', 'hh', '', '', '', '', '', 'hhh', '', '', '', '', 'h', '', '', '']import re
res2 = 'h*'
s = '-hhello hhh python'
result = re.findall(res2, s)
print(result) #['', 'hh', '', '', '', '', '', 'hhh', '', '', '', '', 'h', '', '', '']
(2) + :匹配前一个字符出现1次或无穷次
import re
res2 = 'h+'
s = '-hhello hhh python'
result = re.findall(res2, s)
print(result) # ['hh', 'hhh', 'h']
(3)?: 匹配前一个字符出现0次或者1次,非贪婪模式
import re
res2 = 'h?'
s = '-hhello hhh python'
result = re.findall(res2, s)
print(result) # ['', 'h', 'h', '', '', '', '', '', 'h', 'h', 'h', '', '', '', '', 'h', '', '', '']
(4) {n} :匹配前一个字符连续出现n次
import re
res2 = 'https{2}'
s = '-hhello-httpssss-python'
result = re.findall(res2, s)
print(result) # ['httpss']
匹配到前一个字符s 连续出现2次
{n,m} :匹配前一个字符出现n-m次
import re
res2 = 'https{1,3}'
s = '-hhello-httpssss-python'
result = re.findall(res2, s)
print(result) # ['httpss']
(5) 贪婪模式和非贪婪模式
正则表达式通常使用于查找匹配字符串。贪婪模式,总是尝试匹配尽可能多的字符;非贪婪模式正好相反,总是尝试匹配尽可能少的字符。在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪。
(6) | :两个条件进行匹配,或的关系
import re
res2 = 'he|ll'
s = 'hello python'
result = re.findall(res2, s)
print(result) # ['he', 'll']
(7)边界值:
^ :匹配以哪个字符开头的
import re
res2 = '^he'
s = 'hello python'
result = re.findall(res2, s)
print(result) # ['he']
$ : 匹配以哪个字符结尾的字符
import re
res2 = 'on$'
s = 'hello python'
result = re.findall(res2, s)
print(result) # ['on']
4、分组匹配
() :只匹配()里面的
import re
res2 = '#(\w.+?)#'
s = "{'mobile_phone':'#mobile_phone#','pwd':'Aa123456'}"
result = re.findall(res2, s)
print(result) # ['mobile_phone']
5、match()方法的使用
str = "www.runoob.com"
print(re.match('www', str).span()) # 在起始位置匹配 ,返回匹配到的区间下标 (0,3)
print(re.match('com', str)) # 不在起始位置匹配 None
6、 search():在字符串中搜索,返回搜索到的第一个
str = "www.runoob.com"
print(re.search('www', str).span()) # 在起始位置匹配 ,返回匹配到的区间下标
print(re.search('com', str).span()) # 不在起始位置匹配
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
7、 finditer():
匹配所有的字符串,返回迭代器和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
res = 'h.'
s = 'hello python'
result = re.finditer(res, s)
for str in result:
print(str.group())
he
ho
来源:https://blog.csdn.net/qq_37982823/article/details/122489662
猜你喜欢
- 在XHTML标签中有一些标签的作用是相似的,当然这里的相似是指语义相似,以至于很多人都不清楚这些相似的标签如何使用,那么今天的主题就是分解相
- 前言python中进行面向对象编程,当在子类的实例中调用父类的属性时,由于子类的__init__方法重写了父类的__init__方法,如果在
- 本文实例为大家分享了python实现转圈打印矩阵的具体代码,供大家参考,具体内容如下#! conding:utf-8__author__ =
- 本文介绍,在 VSCode 使用 IPython Kernel的设置方法,详细介绍如下所示:要达到的效果:只需按下 Ctrl+;,选中的几行
- 引言年中购物618大狂欢开始了,各大电商又开始了大力度的折扣促销,我们的小胖又给大家谋了一波福利,淘宝APP直接搜索:小胖发福利,每天领取三
- 通过将身份认证令牌直接传给 API 服务器,可以避免使用 kubectl 代理,像这样:使用 grep/cut 方式:# 查看所有的集群,因
- 这篇文章主要介绍了python检测服务器端口代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 实例如下所示:import matplotlib.pyplot as pltplt.imshow(img)#控制台打印出图像对象的信息,而图
- python中index()、find()方法,具体内容如下:index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(
- ##通过sqlcmd执行sql文件由于sql文件过大,超过了100M,再数据库的窗口执行,结果超出内存了,对于特别大的sql文件可以使用sq
- 先看代码m = nn.Identity(54, unused_argument1=0.1, unused_argument2=False)i
- 前提条件,两台服务器都安装了mysql相同的版本,数据库名也一样,最好数据都是尽量的差不多。mysql服务器端 192.168.0.1: 新
- 在Python 2.7中,一个float的repr返回最接近十七位数的十进制数;这足以精确地识别每个可能的IEEE浮点值.浮点数的str类似
- 本文实例讲述了Vue常用传值方式、父传子、子传父及非父子。分享给大家供大家参考,具体如下:父组件向子组件传值是利用props子组件中的注意事
- 通过这个布局思路来做一个简单的后台管理系统也是OK的,大家可以参考一下啦!话不多说,还是先来梳理一下需要的第三方模块。PyQ5 的UI界面布
- 我们知道为了提高代码的运行速度,我们需要对书写的python代码进行性能测试,而代码性能的高低的直接反馈是电脑运行代码所需要的时间。这里将介
- python中的数字类型工具python中为更高级的工作提供很多高级数字编程支持和对象,其中数字类型的完整工具包括:1.整数与浮点型,2.复
- 这篇文章主要介绍了通过实例解析Python调用json模块,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- python 3.x版本print输出不换行的格式如下:print(x, end="")其中,end=&quo
- 在前面实现了平移和缩放,还有一种常用的坐标变换,那就是旋转。比如拍摄的照片上传到电脑里,再打开时发现人的头在下面脚在上,这样肯定看不了,那么