python re正则匹配_python—RE正则表达式
re正则表达式
正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
一、正则表达式的作用
1、给字符串进行模糊匹配,和其它的数据类型没有任何关系
2、对象就是字符串
二、字符匹配(普通字符,元字符)
1.普通字符:数字字符和英文字母和自身匹配
2.元字符:. ^ $ * + ? {} [] () | \
import re
re.方法("规则","匹配的字符串")
. 匹配任意一个字符,除了\n换行符
三、匹配规则
四、使用前需先导入re模块
import re
分别示例:
1、re.findall的使用(配合元字符)
(匹配的规则, 字符串) # 找到所有的匹配元素,返回列表
示例1:. 的作用:匹配任意的意思(一个点代表一个字符,有多个字符,就用多个点代替)
import re
# . :匹配除\n以外的任意符号
print(re.findall("a.+d","abcd"))#匹配的是第一个字母是a,中间是任意字符有1至无穷个,最后一个字母是b
执行结果是:
['abcd']
补充拓展:
1 re.findall("a..x","adsfaeyxsk19") #匹配以a开头,以x结尾的字符
执行结果:
1 ['aeyx']
示例2:^:从字符串开始位置匹配;$:从字符串结尾匹配
# ^:从字符串开始位置匹配
# $:从字符串结尾匹配
import re
print(re.findall("^yuan","yuandashj342jhg234"))#以yuan开始
print(re.findall("yuan$","yuandashj342jhg234yuan"))#以yuan结尾
执行结果是:
['yuan']
['yuan']
示例3:{} 想取多少次,就取多少次
# * + ? {} :这4个都表达的是重复
print(re.findall("a.*d","abcd"))#匹配的是第一个字母是a,中间是任意字符有0至无穷个,最后一个字母是b
print(re.findall("a.+d","abcshsjd"))#匹配的是第一个字母是a,中间是任意字符有1至无穷个,最后一个字母是b
print(re.findall("a?d","bdkaaaad"))#匹配的a有0至1个
print(re.findall("[0-9]{4}","af5324jh523hgj34gkhg53453"))#匹配的是在[0-9]中取一个数字,取出4个
执行结果是:
['abcd']
['abcshsjd']
['d', 'ad']
['5324', '5345']
补充:
{0,} ==*
1 re.findall("alex{1,}","asdhfalexx")
执行结果:
1 ['alexx']
{1,}==+
1 re.findall("alex{0,}","asdhfalexx")
执行结果:
1 ['alexx']
{0,1}==?
1 re.findall("alex{0,1}","asdhfalexx")
执行结果:
1 ['alex']
{6} 重复6次
1 re.findall("alex{6}","asdhfalexxxxxx")
执行结果:
1 ['alexxxxxx']
{0,6} 重复1,2,3,4,5,6
1 re.findall("alex{0,6}","asdhfalexx")
执行结果:
1 ['alexx']
示例4:字符集 []: 起一个或者的意思
# 字符集 []: 起一个或者的意思
print(re.findall("a[bc]d","hasdabdjhacd"))#匹配的是第一个字母是a,第二个是b或者c,最后一个是d
执行结果是:
['abd', 'acd']
#注意: 在字符集[]内,* ,+和.等元字符都是普通符号,没有任何意义,除了 - ^ \有特殊意义,[^] 就是不是他的都匹配上示例5:#注意: 在字符集[]内,* ,+和.等元字符都是普通符号,没有任何意义,除了 - ^ \有特殊意义,[^] 就是不是他的都匹配上
# 字符集 []: 起一个或者的意思
print(re.findall("a[bc]d","hasdabdjhacd"))#匹配的是第一个字母是a,第二个是b或者c,最后一个是d
#注意: 在字符集[]内,* ,+和.等元字符都是普通符号,没有任何意义,除了 - ^ \有特殊意义
print(re.findall("[0-9]+","dashj342jhg234"))#-在里面是取范围的意思,表示取数字[0-9]中的一个有1至无穷次
print(re.findall("[a-z]+","dashj342jhg234"))#-在里面是取范围的意思,表示取字母[a-z]中的一个有1至无穷次
print(re.findall("[^\d]+","d2a2fhj87fgj"))#^表示的是“非”的意思,匹配的是,非任何数字的,且出现1至无穷次
print(re.findall("[\^\d]","d2a2fhj87fgj"))#第一个\是转义的意思,表示的是不是“非”的数字的意思
print(re.findall("[a.b]","d2a2.fhj87fgj"))#.在里面就是普通字符
执行结果是:
['abd', 'acd']
['342', '234']
['dashj', 'jhg']
['d', 'a', 'fhj', 'fgj']
['2', '2', '8', '7']
['a', '.']
示例6:(关于贪婪匹配和非贪婪匹配)
#贪婪匹配
print(re.findall("\d+","af5324jh523hgj34gkhg53453"))#匹配的是数字有1至无穷个
# #非贪婪匹配
print(re.findall("\d+?","af5324jh523hgj34gkhg53453"))#匹配的是数字有0-1个
执行结果是:
['5324', '523', '34', '53453']
['5', '3', '2', '4', '5', '2', '3', '3', '4', '5', '3', '4', '5', '3']
示例7:():分组,特点是只要匹配到了就不往下走了
# ():分组,特点是只要匹配到了就不往下走了
print(re.findall("(ad)+","adad"))#匹配的是ad出现1至无穷次
print(re.findall("(ad)+yuan","adyuangfsdui"))#匹配的是ad出现1至无穷次,且后面是yuan
print(re.findall("(?:ad)+yuan","addyuangfsdui"))#?:表示的是取消优先级,因为涉及到分组,优先把分组内容显示出来,匹配的只是分组的内容
print(re.findall("(\d)+yuan","adad678423yuang4234fsdui"))#匹配的是数字有1至无穷个
执行结果是:
['ad']
['ad']
[]
['3']
示例8:| :或
# | :或
print(re.findall("www\.(?:oldboy|baidu)\.com","www.oldboy.com"))
执行结果是:
['www.oldboy.com']
示例9:\:转义符号
(1) 后面加一个元字符使其变成普通符号 \. \*(可以将有特殊符号变成普通符号)
(2)将一些普通符号变成特殊符号 比如 \d(表示的是数字)\w(表示的是任意数字和字母,符号不算)
# \:转义符号
# 1 后面加一个元字符使其变成普通符号 \. \*(可以将有特殊符号变成普通符号)
# 2 将一些普通符号变成特殊符号 比如 \d(表示的是数字)\w(表示的是任意数字和字母,符号不算)
print(re.findall("\d+\.?\d*\*\d+\.?\d*","-2*6+7*45+1.456*3-8/4"))
#\d+\.?\d*表示的是数字有1至无穷个,小数点有0至1个,小数点后面的数字有0至无穷个
#\*是将*号之前的代表0至无穷个变成普通的字符乘号的意思
#\d+\.?\d*表示的是数字有1至无穷个,小数点有0至1个,小数点后面的数字有0至无穷个
print(re.findall("\w","$da@s4 234"))#匹配任意的字母和数字
执行结果是:
['2*6', '7*45', '1.456*3']
['d', 'a', 's', '4', '2', '3', '4']
示例10:
1 re.findall("\S+","hello world") #\S 匹配非空的字符
执行结果:
1 ['hello', 'world']
示例11:
(1)
1 re.findall(r"I\b","I am LIST") re的r =\\ ,就相当转义两次
执行结果:
1 ['I']
(2)
1 re.findall("I\\b","I am LIST") #\\转义字符
执行结果:
1 ['I']
(3)python解释器\\ 两个,re转义\\ 两个,所以是\\\\ 四个
1 re.findall("c\\\\l","abc\lerwt") #同时匹配c和l
执行结果:
1 ['c\\l']
(4)
1 re.findall(r"c\\l","abc\lerwt") #同时匹配c和l
执行结果:
1 ['c\\l']
以上都是re.findall的使用,返回的都是列表的形式
re模块下的常用方法
2、re.finditer的使用,返回的是可迭代的
使用方法:re.finditer(“规则”,“字符串”)
finditer(迭代器)当数据非常多的时候,他会把数据存在迭代器中,不会放在内存中,用一条处理一条。
示例:
# re.findall()
import re
s=re.finditer("\d+","ad324das32")#匹配数字有1至无穷个
print(s)#s是迭代器
print(next(s).group())#next一下,取一个值
print(next(s).group())
执行结果是:
324
32
3、search;查找,只匹配第一个结果,找到了就不继续了(search 函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以
通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。)
示例:
# search;只匹配第一个结果
ret=re.search("\d+","djksf34asd3")
print(ret.group())
执行结果是:
34
4、match:只在字符串开始的位置匹配
示例:
##match:只在字符串开始的位置匹配
ret=re.match("\d+","423djksf34asd3")
print(ret.group())
执行结果是:
423
re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
5、split 分割
示例:
#split 分割
s2=re.split("\d+","fhd3245jskf54skf453sd")
print(s2)
s2=re.split("\d+","fhd3245jskf54skf453sd",2)#2是指分隔的次数
print(s2)
ret3=re.split("l","hello yuan")
print(ret3)
执行结果是:
['fhd', 'jskf', 'skf', 'sd']
['fhd', 'jskf', 'skf453sd']
['he', '', 'o yuan']
6、sub 替换
示例:
# #sub: 替换
#
ret4=re.sub("\d+","A","hello 234jkhh23")#将数字替换成A
print(ret4)
ret4=re.sub("\d+","A","hello 234jkhh23",1)#1表示的是将第一串数字替换成A
print(ret4)
执行结果:
hello AjkhhA
hello Ajkhh23
补充:
subn 第一个匹配元组,第二个匹配次数
示例:
ret=re.subn('\d','A','alvin5yuan6') #将数字替换成A
print(ret)#打印的第一个是匹配元组,第二个匹配替换的次数是2次
ret=re.subn("\d", "A", "jaskd4234ashdjf5423") # 第一个匹配元组,第二个匹配次数,8次
print(ret)
执行结果是:
('alvinAyuanA', 2)
('jaskdAAAAashdjfAAAA', 8)
7、re.compile 编译方法
示例:
#compile: 编译方法
c=re.compile("\d+")
ret5=c.findall("hello32world53") #相当于是re.findall("\d+","hello32world53")
print(ret5)
执行结果是:
['32', '53']
五、生产环境常见正则示例:
1、匹配手机号
1 phone_num = '13001000000'
2 a = re.compile(r"^1[\d+]{10}")
3 b = a.match(phone_num)
4 print(b.group())
2、匹配IPv4
1 # 匹配IP地址
2 ip = '192.168.1.1'
3 a = re.compile(r"(((1?[0-9]?[0-9])|(2[0-4][0-9])|(25[0-5]))\.){3}((1?[0-9]?[0-9])|(2[0-4][0-9])|(25[0-5]))$")
4 b = a.search(ip)
5 print(b)
3、匹配E-mail
1 email = '630571017@qq.com'
2 a = re.compile(r"(.*){0,26}@(\w+){0,20}.(\w+){0,8}")
3 b = a.search(email)
4 print(b.group())
python re正则匹配_python—RE正则表达式相关推荐
- python re正则匹配_python re正则表达式模块
模块的的作用主要是用于字符串和文本处理,查找,搜索,替换等 复习一下基本的正则表达式吧 .:匹配除了换行符以为的任意单个字符 *:匹配任意字符,一个,零个,多个都能匹配得到 俗称贪婪模式 +:匹配位于 ...
- python字符串正则替换_Python用正则表达式进行字符串替换方法
Python正则表达式在使用中会经常应用到字符串替换的代码.这篇文章主要介绍了Python正则表达式如何进行字符串替换,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. Python正则表达式在使用 ...
- python正则匹配空格+数字+空格_详解Python中正则匹配TAB及空格的小技巧
详解Python中正则匹配TAB及空格的小技巧 发布时间:2020-10-15 08:38:48 来源:脚本之家 阅读:94 作者:杰瑞26 在正则中,使用.*可以匹配所有字符,其中.代表除\n外的任 ...
- java 正则 空格_java 正则匹配空格字符串 正则表达式截取字符串
java 正则匹配空格字符串 正则表达式截取字符串 需求:从一堆sql中取出某些特定字符串: 比如配置的sql语句为:"company_code = @cc and project_id = ...
- python正则匹配_python 正则表达式详解
正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能 ...
- python re正则查找_python正则表达式 - re
1,匹配符号 基本元字符 . : 任意字符,除了\n,flags设置为DOTALL(S)可以让.匹配\n |:逻辑或 \:转义 ():捕获组 空白字符 [\b] : 回退 \f : 换页 \n : 换 ...
- python 模糊匹配ftp文件_使用python实现正则匹配检索远端FTP目录下的文件
遇到一个问题,需要正则匹配远端FTP目录下的文件,如果使用ftp客户端可以通过命令行很容易的做到这一点,但是暂时没有一个工具支持这样的需求,于是通过python对FTP的支持和对正则表达式的支持,写了 ...
- python 多次匹配_Python学习记录14
print("#") import re # s = "哈哈2" res = re.search("[0-9]",s) print(res) ...
- Python中正则匹配使用findall时的注意事项
在使用正则搜索内容时遇到一个小坑,百度搜了一下,遇到这个坑的还不少,特此记录一下. 比如说有一个字符串 "123@qq.comaaa@163.combbb@126.comasdf111@a ...
最新文章
- DVWA提示Unable to connect to the database.
- pandas使用replace函数将dataframe中None值以及其他异常编码值(例如,9999)替换为np.nan
- JavaWeb总结(九)
- Python爬虫开发:requests库的使用--发送带参数get请求
- C# Winform 带优美外观的UserControl控件GroupBox
- python 折线图中文乱码_彻底解决 Python画图中文乱码问题--Pyplotz组件
- 瀑布流方式三(方式二的升级版)
- Windows 使用浮动键盘语言栏
- C++调用matlab接口
- python程序设计pdf上海交大_上海交大2011_2012程序设计python期末考试题
- Python基础——模块和正则表达式
- 什么编程语言的开发者平均年薪高达94万?
- 不容错过 食材VRay材质球素材推荐
- Java 图片转换base64
- 骑行、318总结心得啊经验什么的
- python立即关机_Python之电脑好帮手—自动定时关机
- Android---ADB工具连接真实手机(有线连接与无线连接)
- 【科普】1分钟帮你搞懂机械硬盘和固态硬盘
- 《MySQL数据库用户模块需求分析》
- 从零开始Bootstrap教程
热门文章
- 可怜的博主跟小豆人杠起来啦!Python制作的吃豆人小游戏,快来围观!!
- iOS开发人员必看的精品资料(100个)
- Corona建筑表现作品:岩石上的住宅
- node mysql timeout_Error: Handshake inactivity timeout in Node.js MYSQL module
- C#调用系统蜂鸣,警报声
- 搬家后计算机总重启,电脑老是开机后不久(几分钟)自动重启,重启一两遍后就可以正常运行...
- 默哀日网站置灰,支持IE浏览器h5
- 涉密计算机外送维修,涉密计算机送修
- google统计ga.js本地化提高网站性能
- BP算法的反向传播和权值修正(1)