Python re模块 正则表达式之compile函数 为了重复利用同一个正则对象 , 需要多次使用这个正则表达式的话,使用re.compile()保存这个正则对象以便复用,可以让程序更加高效 。
1)re.compile
参数:
re.I 忽略大小写
re.L 表示特殊字符集 w, W, b, B, s, S 依赖于当前环境
re.M 多行模式
re.S 即为' . '并且包括换行符在内的任意字符(' . '不包括换行符)
re.U 表示特殊字符集 w, W, b, B, d, D, s, S 依赖于 Unicode 字符属性数据库
re.X 为了增加可读性,忽略空格和' # '后面的注释
案例:
在上面,当匹配成功时返回一个 Match 对象,其中:
2)re.findall
在字符串中找到正则表达式所匹配的所有子串 , 并返回一个列表,如果有多个匹配模式 , 则返回元组列表 , 如果没有找到匹配的,则返回空列表 。
注意:match 和 search 是匹配一次 findall 匹配所有 。
参数:
案例:
3)re.finditer
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回 。
案例:
4)re.split
split 方法按照能够匹配的子串将字符串分割后返回列表 。
案例:
从上篇Python re模块 正则表达式到这篇,我们已经把常用的正则匹配的方法学会了 。
【python正则常用函数 python 正则表达】关注我,坚持每日积累一个技巧,长期坚持,我们将会不断进步 。
#python# #程序员# #请回答,你的年度知识点# #教育听我说# #计算机#
一文秒懂python正则表达式常用函数01 Re概览
Re模块是python的内置模块,提供了正则表达式在python中的所有用法,默认安装位置在python根目录下的Lib文件夹(如 ..\Python\Python37\Lib) 。主要提供了3大类字符串操作方法:
字符查找/匹配
字符替换
字符分割
由于是面向字符串类型的模块,就不得不提到字符串编码类型 。re模块中 , 模式串和搜索串既可以是 Unicode 字符串 (常用str类型) ,也可以是8位字节串 (bytes,2位16进制数字,例如\xe5),但要求二者必须是同类型字符串 。
02 字符串查找/匹配
预编译:compile
在介绍查找和匹配函数前,首先需要知道re的compile函数 , 该函数可以将一个模式串编译成正则表达式类型,以便后续快速匹配和复用
import repattern = re.compile(r'[a-z]{2,5}')type(pattern) #re.Pattern
此例创建了一个正则表达式式对象 (re.pattern),命名为pattern,用于匹配2-5位小写字母的模式串 。后续在使用其他正则表达式函数时 , 即可使用pattern进行方法调用 。
匹配:match
match函数用于从文本串的起始位置开始匹配,若匹配成功,则返回相应的匹配对象,此时可调用group()方法返回匹配结果 , 也可用span()方法返回匹配起止下标区间;否则返回None
import repattern = re.compile(r'[a-z]{2,5}')text1 = 'this is a re test'res = pattern.match(text1)print(res) #if res:print(res.group()) #thisprint(res.span()) #(0, 4)text2 = '是的, this is a re test'print(pattern.match(text2))#None
match函数还有一个变形函数fullmatch,当且仅当模式串与文本串刚好全部匹配时,返回一个匹配对象,否则返回None
搜索:search
match只提供了从文本串起始位置匹配的结果,如果想从任意位置匹配,则可调用search方法,与match方法类似,当任意位置匹配成功,则立即返回一个匹配对象,也可调用span()方法获取起止区间、调用group方法获得匹配文本串
import repattern = re.compile(r'\s[a-z]{2}')text1 = 'this is a re test'res = pattern.search(text1)print(res) #if res:print(res.group()) #isprint(res.span()) #(4, 7)pattern2 = re.compile(r'\s[a-z]{5}')text2 = '是的,this is a re test'print(pattern2.search(text2))#None
match和search均用于匹配单个结果 , 唯一区别在于前者是从起始位置开始匹配,而后者从任意位置匹配,匹配成功则返回一个match对象 。
全搜索:findall/finditer
几乎是最常用的正则表达式函数,用于寻找所有匹配的结果,例如在爬虫信息提取中,可非常方便地提取所有匹配字段
import repattern = re.compile(r'\s[a-z]{2,5}')text1 = 'this is a re test'res = pattern.findall(text1)print(res) #[' is', ' re', ' test']
findall返回的是一个列表对象类型,当无匹配对象时,返回一个空列表 。为了避免因同时返回大量匹配结果占用过多内存,可以调用finditer函数返回一个迭代器类型,其中每个迭代元素是一个match对象,可继续调用group和span方法获取相应结果
import repattern = re.compile(r'\s[a-z]{2,5}')text1 = 'this is a re test'res = pattern.finditer(text1)for r in res:print(r.group())"""isretest"""
当匹配模式串较为简单或者仅需单词调用时,上述所有方法也可直接调用re类函数,而无需事先编译 。此时各方法的第一个参数为模式串 。
import repattern = re.compile(r'\d{2,5}')text = 'this is re test're.findall('[a-z] ', text) #['this', 'is', 're', 'test']03 字符串替换/分割
替换:sub/subn
当需要对文本串进行条件替换时 , 可调用re.sub实现 (当然也可先编译后再用调用实例方法) , 相应参数分别为模式串、替换格式、文本串,还可以通过增加缺省参数限定替换次数和匹配模式 。通过在模式串进行分组,可实现字符串的格式化替换(类似字符串的format方法),以实现特定任务 。
import retext = 'today is 2020-03-05'print(re.sub('-', '', text)) #'today is 20200305'print(re.sub('-', '', text, 1)) #'today is 202003-05'print(re.sub('(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1', text)) #'today is 03/05/2020'
re.sub的一个变形方法是re.subn,区别是返回一个2元素的元组,其中第一个元素为替换结果,第二个为替换次数
import retext = 'today is 2020-03-05'print(re.subn('-', '', text)) #('today is 20200305', 2)
分割:split
还可以调用正则表达式实现字符串的特定分割,相当于.split()方法的一个加强版,实现特定模式的分割,返回一个切割后的结果列表
import retext = 'today is a re test, what do you mind?'print(re.split(',', text)) #['today is a re test', ' what do you mind?']04 总结
python中的re模块提供了正则表达式的常用方法,每种方法都包括类方法调用(如re.match)或模式串的实例调用(pattern.match)2种形式
常用的匹配函数:match/fullmatch
常用的搜索函数:search/findall/finditer
常用的替换函数:sub/subn
常用的切割函数:split
还有其他很多方法 , 但不是很常用,具体可参考官方文档
另外,python还有第三方正则表达式库regex可供选择
到此这篇关于一文秒懂python正则表达式常用函数的文章就介绍到这了,希望大家以后多多支持!
python正则表达式函数match和search的区别详解match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none
例如:
#! /usr/bin/env python
# -*- coding=utf-8 -*-
import re
text = 'pythontab'
m = re.match(r"\w ", text)
if m:
print m.group(0)
else:
print 'not match'
结果是:pythontab
而:
#! /usr/bin/env python
# -*- coding=utf-8 -*-
#
import re
text = '@pythontab'
m = re.match(r"\w ", text)
if m:
print m.group(0)
else:
print 'not match'
结果是:not match
search()会扫描整个字符串并返回第一个成功的匹配
例如:
#! /usr/bin/env python
# -*- coding=utf-8 -*-
#
import re
text = 'pythontab'
m = re.search(r"\w ", text)
if m:
print m.group(0)
else:
print 'not match'
结果是:pythontab
那这样呢:
#! /usr/bin/env python
# -*- coding=utf-8 -*-
#
import re
text = '@pythontab'
m = re.search(r"\w ", text)
if m:
print m.group(0)
else:
print 'not match'
结果是:pythontab
如何用python正则?(1)re.match()函数
re.match 尝试从字符串的开始匹配一个模式 。
函数语法:
re.match(pattern, string, flags=0)
函数参数说明:
参数
描述
pattern匹配的正则表达式
string要匹配的字符串 。
flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等 。
匹配成功re.match方法返回一个匹配的对象,否则返回None 。
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式 。
匹配对象方法
描述
group(num=0)匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组 。
groups()返回一个包含所有小组字符串的元组 , 从 1 到 所含的小组号 。
(2)re.research()函数
re.search匹配整个字符串 , 直到找到一个匹配 。
函数语法:
re.search(pattern, string, flags=0)
函数参数说明:
参数
描述
pattern匹配的正则表达式
string要匹配的字符串 。
flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等 。
匹配成功re.search方法方法返回一个匹配的对象 , 否则返回None 。
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式 。
匹配对象方法
描述
group(num=0)匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组 。
groups()返回一个包含所有小组字符串的元组,从 1 到 所含的小组号 。
(3)实例
我这里采用re.search()函数解决的问题 。
测试数据集为购物网站用户评论
实例代码:
[python] view plain copy
# -*-coding:utf-8 -*-
import sys
import re
reload(sys)
text = open('JD_DFB_comments.txt')
line = text.readline()
#i = 0
while line:
#i = i 1
#re.search匹配整个字符串,直到找到一个匹配 。
n1 = re.search(r'(要(是|能)(.*)就(更|好|再|直观|完美|太)(.*)了)',line)
n2 = re.search(r'(如果)(.*)就(更|好|再|直观|完美|太)(.*)了',line)
#打开将要写入的数据
data = https://www.04ip.com/post/open('aa.txt','a')
if n1:
#print line
data.write(line)#写入匹配到的数据
#print i记录匹配结果所在的行数
#print n1.group()#等于print line
print n1.group(3)#打出第三个括号里的内容
if n2:
#print n2.group()
print n2.group(2)
line = text.readline()
text.close()
阅读更多
个人分类: Python语言
想对作者说点什么? 我来说一句
Python中re的match、search、findall、finditer区别
Python-正则表示式之re.match函数在日常开发当中python正则常用函数,我们肯定会有遇到很多需要正则表达式处理的地方 。下面来分享一下我了解到的Python正则表达式知识 。
re.match的作用是尝试从字符串的起始位置匹配一个模式 , 如果不是起始位置匹配成功的话,match()就返回 none 。具体的语法是python正则常用函数:
re.match(pattern, string, flags=0)
参数说明:
1.pattern:匹配的正则表达式python正则常用函数;
2.string:要匹配的字符串;
3.flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等 。
趣玩Python第16关:3个技巧掌握正则字符串的匹配查询
Python中的re模块中的findall函数可以对指定的字符串进行遍历匹配python正则常用函数,如下python正则常用函数:
findall(pattern, string, flags=0)
pattern:指定需要匹配的正则表达式 。
string:指定待处理的字符串 。
flags:指定匹配模式python正则常用函数,常用的值可以是re.I、re.M、re.S和re.X 。re.I的模式是让正则表达式对大小写不敏感;re.M的模式是让正则表达式可以多行匹配;re.S的模式指明正则符号.可以匹配任意字符,包括换行符 ;re.X模式允许正则表达式可以写得更加详细,如多行表示、忽略空白字符、加入注释等 。
字符串的匹配替换
re模块中的sub函数的功能是替换,类似于字符串的replace方法,该函数根据正则表达式把满足匹配的内容替换为repl , 如下:
sub(pattern, repl, string, count=0, flags=0)
pattern:同findall函数中的pattern 。
repl:指定替换成的新值 。
string:同findall函数中的string 。
count:用于指定最多替换的次数,默认为全部替换 。
flags:同findall函数 。
字符串的匹配分割
re模块中的split函数是将字符串按照指定的正则表达式分隔开 , 类似于字符串的split,如下:
split(pattern, string, maxsplit=0, flags=0)
pattern:同findall函数中的pattern 。
maxsplit:用于指定最大分割次数,默认为全部分割 。
string:同findall函数中的string 。
flags:同findall函数中的flags 。
以上就是本次分享的全部内容了 , 不知大家对我讲述的Python正则表达式妙用感觉怎么样?
脑筋急转弯:有人想喝点牛奶解渴,却一命呜呼了 , 为什么?
python正则常用函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python 正则表达、python正则常用函数的信息别忘了在本站进行查找喔 。
推荐阅读
- 民族ppt怎么制作,民族 ppt
- postgresqlnosqljpa的简单介绍
- gis字段超过18位,arcgis字段名长度限制
- 直播间眼泪素材,主播泪歌词调侃
- mysql怎么模糊查找表 mysql进行模糊查询
- 新媒体视频如何做策划,新媒体短视频策划文案
- 解谜恐怖游戏小游戏,解谜恐怖游戏手游
- 显卡GTX880M怎么样,gtx880m相当于什么显卡
- c语言中函数传递参数正确 c语言函数的参数传递