我的编程空间,编程开发者的网络收藏夹
学习永远不晚

关于Python正则表达式模块之re模块

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

关于Python正则表达式模块之re模块

前言:

re模块(正则表达)是Python中的重要组成部分,这里涉及到字符串的匹配,转换,自定义格式化……等等,尤其是对于后面要学的Python爬虫是经常用到的。这个模块是Python自带的,不需要pip下载,导入使用就行了。

之前我们学过了r原始字符串标识符,比如:r'123\n' 输出结果就是123\n,是表示输出原始字符串,里面的转义符就当做普通的一个字符直接输出就行了,这个也是一种正则表达方式。

 print(r'hello\n123\t')
#输出结果:hello\n123\t

导入模块

import re

1.re.match() 函数

语法格式:re.match(pat,string,flag=0)

用法:re.match('正则表达式’,'要匹配的字符串',flag= )

参数说明

pat:是表示参与匹配的正则表达式

string:是表示要匹配的字符串

flag:是标志符,用于控制正则表达式的匹配方式(设置条件之类的)

函数说明:

这个函数是从开头第一个字符开始匹配的,如果匹配成功的话就返回一个匹配对象,如果失败就返回none。如果我们想要获取到返回的对象就用group(num)函数来获取,这个函数获取的结果就是匹配成功的字符串,如果num为0的话,其实等效于group(),如果num为1的话就返回正则表达式第一个括号匹配成功的字符串,如果num为2的话就返回正则表达式第二个括号匹配成功的字符串

(1)匹配单个字符

字符功能位置
.匹配任意一个字符(除了\n)
[ ]

匹配[ ]中列举的字符(可以是一个范围)

\d匹配数字,0~9可以写在[ ]中
\D

匹配非数字,除了数字以外都可以匹配成功

可以写在[ ]中
\s匹配空白符,空格 ,Tab可以写在[ ]中
\S匹配非空白符可以写在[ ]中
\w
匹配0-9,a-z,A-Z,中文等等除了特殊符号以外的范围
内的字符
可以写在[ ]中
\W

匹配非单词子串,除了\w范围 以内的都可以匹配

可以写在[ ]中

示例

import re
string='hello word!'
pat=re.match('.',string)
print(pat)
print(pat.group())
#输出结果:<re.Match object; span=(0, 1), match='h'>  
# h

其中第一个输出的结果就是返回的对象,span=(0,1)是表示匹配范围为字符串的第0位(区间是左闭右开),匹配成功的字符串match='h'

如果用group()去获取对象字符串就直接输出 h

示例1:

import re
#单个匹配示例
 
#1.'.'号匹配
a='123hello你好'
a1=re.match('..',a)#正则表达式有两个..那么就匹配字符串a前两个字符
print(a1,a1.group())
#输出结果:<re.Match object; span=(0, 2), match='12'> 12
 
#2.'.'号匹配
b='garrymod555'
b1=re.match('g..r',b)
print(b1,b1.group())
#输出结果:<re.Match object; span=(0, 4), match='garr'> garr
 
#3.直接匹配:被匹配的字符串首字符要与正则表达式相同,大小写一一对应
c='python欧尼酱'
c1=re.match('p',c)
print(c1,c1.group())
#输出结果:<re.Match object; span=(0, 1), match='p'> p
 
#4.利用[],枚举匹配
d='Haolow'
d1=re.match('[hH]',d)  #这时候d 的开头大小写都可以匹配成功
print(d1,d1.group())
#输出结果:<re.Match object; span=(0, 1), match='H'> H
 
#利用[],枚举匹配0~9范围的数字
num='51997asd'
num1=re.match('[0123456789]',num)
print(num1,num1.group())
#输出结果:<re.Match object; span=(0, 1), match='5'> 5
 
#5.利用[],范围匹配
e='ikuncxk'
e1=re.match('[a-z]',e)  #[]内是表示a~z在字符范围
print(e1,e1.group())
#输出结果:<re.Match object; span=(0, 1), match='i'> i
 
#6.利用[],匹配多个范围
f='567hhh'
f1=re.match('[2-68-9]',f)  #这个是表示匹配2~6和8~9 范围以内的数字(字母也是同样的道理)
print(f1,f1.group())
#输出结果:<re.Match object; span=(0, 1), match='5'> 5
 
#7.利用\d,匹配数字(另外一个是\D,这里就不讲了,正则表达式匹配添加是跟\d完全相反的)
g='666985www'
g1=re.match('\d',g)   #
print(g1,g1.group())
#输出结果:<re.Match object; span=(0, 1), match='6'> 6
 
#8.利用\s,匹配空白符(跟上面一样\S,是\s反过来的,用法一样,不讲)
h='  91呵呵'
h1=re.match('\s',h)
print(h1,h1.group())
#输出结果:<re.Match object; span=(0, 1), match=' '>
 
#9.利用\w,匹配0-9,a-z,A-Z,中文等等除了特色符号以外的范围内的字符
i='天问1号'
i1=re.match('\w',i)
print(i1,i1.group())
#输出结果:<re.Match object; span=(0, 4), match='天问1号'> 天问1号
 
#10.利用\W,匹配特殊字符(\w范围以外的字符)
k='@qq.com'
k1=re.match('\W',k)
print(k1,k1.group())
#输出结果:<re.Match object; span=(0, 1), match='@'> @

示例2:(匹配失败)

import re
kun='hellosad'
k=re.match('5',kun)
print(k)
#输出结果:None

(2)匹配多个字符 字符功能/说明位置*

字符功能/说明位置
*

匹配前一个字符,这个字符出现0次到无限次(可有可无)

可以用在字符或者()之后

+

匹配前一个字符,这个字符必须出现一次以上(否则报错)上限为无限

可以用在字符或者()之后

匹配前一个字符,这个字符出现0次到1次

可以用在字符或者()之后

{m}

匹配前⼀个字符出现m次

可以用在字符或者()之后

{m,n}

匹配前⼀个字符出现从m到n次,若省略m,则匹配0到n次,若省略n,则匹配m到无限次;若省略m,这匹配m,这匹配0到n次

可以用在字符或者()之后

示例代码:

import re
 
# *  匹配多个字符
p='1112223haowww.com'
#示例1
p1=re.match('[\d]*',p)
print(p1.group())
#输出结果:1112223
#示例2
p2=re.match('1*',p)
print(p2.group())
#输出结果:111
#示例3
p3=re.match('1t*',p)
print(p3.group())  #不会报错
#输出结果:1
 
# + 匹配多个字符
q='aaa112python'
#示例1
q1=re.match('[a-z]+',q)
print(q1.group())
#输出结果:aaa
#示例2
q2=re.match('ai+',q)
#print(q2.group()) #报错
print(q2)
#输出结果:None
 
# { }综合使用
#示例1:匹配由大小写字母以及数字组成的密码
ret=re.match('[a-zA-Z0-9]{6}','321uyg88') #如果{}里面的数字大于8就会报错,超过范围了
print(ret.group()) #输出结果:321uyg
#示例2:匹配8~12为由小写字母和数字组成的密码
res=re.match('[a-z0-9]{8,12}','123520ikun')
print(res.group())#输出结果123520ikun

(3) 匹配开头和结尾

字符功能
^匹配字符串的开头
$匹配字符串的结尾

示例:

2.re.search() 函数

格式:

re.search('正则表达式','字符串')

说明:这个函数是从整个字符串去进行匹配的,跟re.match()不同,re.match()是从开头去匹配,如果开头不一样就返回None,而re.search()是看字符串的全局,直到匹配到满足正则表达式才返回匹配对象,如果整个字符串都没有找到匹配对象才会返回None

示例:

import re
r=re.search('wao','123waohhhq')
print(r.group())
#输出结果:wao
 
s=re.search('q[0-9]?j','heheqq5jbye')
print(s.group())
#输出结果:q5j

3.re.findall() 函数

格式:

re.findall('正则表达式','字符串')

说明:整个函数同样也是从整个字符串来匹配,但是这个函数是吧整个字符串所以满足正则表达式的子串以列表的形式返回(前面的函数都是返回一个对象,需要用group()函数来获取对象的子串),而这个函数是直接返回一个含有全部子串的列表

示例:

import re
ret=re.findall('\d+','123www555abc789')
print(ret)
#输出结果:['123', '555', '789']

4.re.finditer() 函数

格式:

re.finditer('正则表达式','字符串')

说明:这个函数跟re.findall() 差不多,只是前者是返回一个迭代器(需要用循环去依次获取里面的对象),而后者是返回一个列表

示例:

import re
ret=re.finditer('\d+','Python999,C++555,Java666')
print(ret) #输出的是迭代器地址
for i in ret:
    print(i.group(),end=' ')
#输出结果:<callable_iterator object at 0x000001E35504B5E0>
#         999 555 666 

5.re.split() 函数

split()整个函数在之前的字符串操作初步讲过,是一个切割函数Python学习------起步7(字符串的连接、删除、修改、查询与统计、类型判断及字符串字母大小写转换)_Python欧尼酱的博客-CSDN博客

格式:

re.split(pat,string,times)

参数说明:

pat:是正则表达式

string:是字符串

times:是分割次数

功能作用:在整个字符串中,根据匹配成功的子串作为切割点,对字符串进行切割,然后返回一个列表类型

示例:

import re
cut=re.split('\d','hello 1 my 2 friend')
print(cut)
#输出结果:['hello ', ' my ', ' friend']
 
cut_1=re.split(r':| ','Jack say:"I can do this all day"') #r表示后面为原字符串
print(cut_1)
#输出结果:['Jack', 'say', '"I', 'can', 'do', 'this', 'all', 'day"']

6.re.sub() 函数

格式:

re.sub(pat,repalc,string,count,flag)

参数:

pat:是表示正则表达式

replac:是要替换的字符串或者函数(必写)

string:是匹配的字符串

count:是替换的最大次数,如果不写就默认全部替换

flag:可选参数,标志符,用于控制正则表达式的匹配条件

功能说明:sub是substitute的缩写,意思是取代,这个函数可以将匹配到的子串进行取代替换,然后返回一个字符串类型

import re
kun=re.sub('\d[A-Z]','鹜','hello,4Baww5Kc8P')
print(kun)
#输出结果:hello,鹜aww鹜c鹜
 
 
KUN=re.sub('\d[A-Z]','鹜','hello,4Baww5Kc8P',count=2)  #这里设置了count的值为2
print(KUN)
#输出结果:hello,鹜aww鹜c8P

7.re.subn() 函数

re.subn(pat,repalc,string,count,flag)

参数:

pat:是表示正则表达式

replac:是要替换的字符串或者函数(必写)

string:是匹配的字符串

count:是替换的最大次数,如果不写就默认全部替换

flag:可选参数,标志符,用于控制正则表达式的匹配条件

说明:这个函数的用法跟re.sub() 的用法是一样的,只是返回值不一样,这个函数的返回值是一个元组,格式:('返回的字符串','次数')

import re
def rep(temp):
    temp='GBT'
    return temp
su=re.subn('\d+',rep,'hao,w1q2d3') #不设置count,此时就是全部的替换次数
print(su)
#输出结果:('hao,wGBTqGBTdGBT', 3)

到此这篇关于关于Python正则表达式模块之re模块的文章就介绍到这了,更多相关Python正则表达式 re模块内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

关于Python正则表达式模块之re模块

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

关于Python正则表达式模块之re模块

这篇文章主要介绍了关于Python正则表达式模块之re模块, re模块是Python中的重要组成部分,这里涉及到字符串的匹配,转换,自定义格式化等,需要的朋友可以参考下
2023-05-16

python模块之re(正则表达式)

匹配模式re.ASCII同re.A,对应的内联标识为(?a),用于向后兼容。使元字符\w, \W, \b, \B, \d, \D, \s和\S仅匹配ASCII字符。该模式只在string模式下有意义,在byte模式下将被忽略。re.DEBU
2023-01-31

python--模块之re正则表达式

简介:正则表达式本身是一个小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,我们可以通过直接调用来实现正则匹配。正则表达式基础知识:--普通字符匹配自身 abc ----abc--元字符 . :匹配任何字符(
2023-01-30

python正则表达式模块re

正则表达式的特殊元素匹配符号描述'.'(点dot)在默认模式下,它匹配除换行符之外的任何字符。如果指定了DOTALL标志,则匹配包括换行符在内的任何字符'^'(Caret)匹配以字符串开头,找到后返回匹配的字段import reprint(
2023-01-30

python re模块 正则表达式

导航:1、正则表达式元字符2、预定义字符集3、re模块常用函数4、注意事项正则表达式在很多语言里都支持,python也不例外,re模块就是正则表达式的应用正则表达式对字符串的逻辑操作,主要是对字符串的一种过滤,用“元字符” 与“普通字符”组
2023-01-30

python模块之re正则表达式详解

一、简单介绍 正则表达式是一种小型的、高度专业化的编程语言,并不是python中特有的,是许多编程语言中基础而又重要的一部分。在python中,主要通过re模块来实现。 正则表达式模式被编译成一系列的字节码,然后由用c编写的匹配引擎执行。那
2022-06-04

python3--re模块:正则表达式

怎么判断一个手机号码是否符合规范?根据手机号码一共11位并且只以13,14,15,18开头的数字这些特点,写了一段代码如下:whileTrue:phone_number=input(pleaseinputyourphonenumber:)i
2023-01-30

Python的re模块正则表达式操作

这个模块提供了与 Perl 相似l的正则表达式匹配操作。Unicode字符串也同样适用。正则表达式使用反斜杠" "来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用" \\ "表示正则表达式中的" ",因为
2022-06-04

如何分析Python正则表达式re模块

本篇文章为大家展示了如何分析Python正则表达式re模块,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。简介正则表达式(regular expression)是可以匹配文本片段的模式。最简单的正则表
2023-06-17

python正则表达式re模块怎么使用

这篇文章主要介绍“python正则表达式re模块怎么使用”,在日常操作中,相信很多人在python正则表达式re模块怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python正则表达式re模块怎么使用
2023-07-02

详细解析python正则表达式re模块

本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于正则表达式中re模块的相关问题,下面一起来看一下,希望对大家有帮助。在Python中需要通过正则表达式对字符串进⾏匹配的时候,可以使⽤⼀个python自带的模块,名字为re。正则表达式的大致匹配过程是: 1.依次拿出表达式和文本中的字符比较, 2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。 3.如果表达式中
2022-06-14

python 关于正则表达式re

  1.正则表达式 re  典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。  通
2023-06-02

Python正则表达re模块之findall()函数怎么使用

这篇文章主要介绍“Python正则表达re模块之findall()函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python正则表达re模块之findall()函数怎么使用”文章能帮助大
2023-07-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录