python正则表达式的学习,match()函数,元字符,预定义匹配字符集

更新时间:2023-07-07 21:46:54 阅读: 评论:0

slashpython正则表达式的学习,match()函数,元字符,预定义匹配字符集03 - 正则表达式
⼀. 课程安排
课程内容
1. 正则表达式的简介
概念
正则表达式的应⽤场景
2. Python对正则表达式的⽀持
普通字符
元字符
预定义匹配字符集
重负匹配
位置匹配和⾮贪婪匹配
juicy是什么意思3. re模块常⽤⽅法
4. 分组功能
⼆. 课堂笔记
1.正则表达式的简介
1.1 概念
debbie正则表达式是对字符串操作的⼀种逻辑公式,就是⽤事先定义好的⼀些特定字符、及这些特定字符的组合,组成⼀个“规则字符串”,这个“规则字符串”⽤来表达对字符串的⼀种过滤逻辑
简单来说,我们看⼀下这个字符串\
str1=‘’
他是⼀个QQ邮箱,但是我们需要把QQ号筛选出来,但是通过正则的⽅式就是
import re
str1=''would
qq=re.match(r'\d{9}',str1)
up())
#>>输出结果:719782891
最后我筛选出了我要的内容。这个就是我们需要的QQ号了。
[外链图⽚转存失败,源站可能有防盗链机制,建议将图⽚保存下来直接上传(img-KfetMV2m-1608515476855)
(C:\Urs\Dream\AppData\Roaming\Typora\typora-ur-images\image-20201127170831059.png)]
1.2 正则表达式的应⽤场景
表单验证(例如 : ⼿机号、邮箱、⾝份证… )
爬⾍
2. 正则表达式对Python的⽀持
2.1 普通字符
字母、数字、汉字、下划线、以及没有特殊定义的符号,都是"普通字符"。正则表达式中的普通字符,在匹配的时候,只匹配与⾃⾝相同的⼀个字符。
tony stark我们先来匹配⼀个普通字符看看:(我在⼀堆数据中找python怎么写代码)
import re #导⼊正则模块
#我要找的数据赋值给str1
吃豆豆2004str1 ='python'
#⼀堆数据赋值给shiju
shuju ='python and java'
#⽤正则表达式 match函数取匹配
result = re.match(str1,shuju)
#打印结果看看
up())
sma是什么意思# >> 输出结果: python
这时候我们看到他输⼊与我们想要的数据“python”相同,说明我们匹配出来了,所以说在匹配的时候,只匹配与⾃⾝相同的⼀个字符,简单来说就是找我要的数据。
match()函数
match(pattern, string, flags=0)
第⼀个(pattern)参数是正则表达式,如果匹配成功,则返回⼀个match对象,否则返回⼀个None
第⼆个( string)参数表⽰要匹配的字符串
第三个( flags)参数是标致位⽤于控制正则表达式的匹配⽅式 如: 是否区分⼤⼩写,多⾏匹配等等,下⾯有说明标志位怎么填写。2.2 元字符
正则表达式中使⽤了很多元字符,⽤来表⽰⼀些特殊的含义或功能
表达式 . 的使⽤⽅法
先⽤表达式 a.c 来匹配⼀个字符串 abc
import re
#.可以匹配除了换⾏符之外的任意⼀个字符
jieguo=re.match(r'a.c','abc').group()
print(jieguo)
#>>输出结果  ‘abc’
这时候我们得到结果就是我们想要的,那么这时有⼈会问,我把b换成H试试
jieguo=re.match(r'a.c','aHc').group()
print(jieguo)
#>>输出结果  ‘aHc’
是不是也可以?这样我们再来⼀个数字
jieguo=re.match(r'a.c','a1c').group()禽流感h7n9症状
print(jieguo)
#>>输出结果  ‘a1c’
是不是也没问题,我们发现中间⽆论换什么都可以匹配到这样的⼀个结果。
这时候有同学想试试⼀⼤串看看可以不可以
jieguo=re.match(r'a.c','a123456c').group()
print(jieguo)
#>>输出结果
jieguo=re.match(r'a.c','a123456c').group()
AttributeError:'NoneType'object has no attribute 'group'
这时候就会报错为什么呀?
因为⼀个 “ . ” 可以匹配除了换⾏符(\n)以外的任意⼀个字符,注意时⼀个字符,那么是不是多个点就可以匹配多个字符呀?我们来看下⾯代码:
jieguo=re.match(','a123c').group()
print(jieguo)
#>>输出结果 ‘a123c’
我们看输⼊了三个⼩数点,中间的3个数字字符是不是匹配出来了。
表达式 | 的使⽤⽅法
我们直接看代码:
import re
week#| 逻辑操作符号(“或”的意思)
jieguo=re.match(r'a|c','a').group()
print(jieguo)
#>>输出结果 ‘a’
我们看到结果他输出了“a”,因为我们匹配的内容时“a或c”,因为满⾜a所以输出a
那么我们来⼀个c试试看看:
jieguo=re.match(r'a|c','c').group()
print(jieguo)
#>>输出结果 ‘c’
我们看到结果输出了c,因为c满⾜我们要查找的内容。我们在尝试⼀下除了a或c以外的字母b,试试看:
jieguo=re.match(r'a|c','b').group()
print(jieguo)
#>>输出结果
jieguo=re.match(r'a|c','b').group()
AttributeError:'NoneType'object has no attribute 'group'
是不是报错了?,所以说这⾥只能找到两边其中⼀个数据,其他数据匹配不到。
这时候有有⼈问,如果我要匹配的ac看看他是否能匹配到
jieguo=re.match(r'a|c','ac').group()
print(jieguo)
在先翻译#>>输出结果 ‘a’
我们看到结果只输出了⼀个a,那么这时我们再来试试匹配ca
jieguo=re.match(r'a|c','ca').group()
print(jieguo)
#>>输出结果 ‘c’
这时候我们看到输出的结果位c,就有⼈会问为什么了!先不要纠结为什么,我们先来⼀个以b开头的 bac,试试看:
jieguo=re.match(r'a|c','bac').group()
print(jieguo)
#>>输出结果
jieguo=re.match(r'a|c','bac').group()
AttributeError:'NoneType'object has no attribute 'group'
这是我们看数据⾥⾯有a也有c为什么报错呢?因为match函数他时从数据第⼀个位置开始匹配,我们匹配的内容为a或者c,可是第⼀个数据是b所以导致程序报错。
接下来我们还会将⼀个函数arch函数,因为arch() 函数就不是从必须从第⼀个字符开始匹配,看⼀个演⽰代码:(还是上⾯的代码,只是换了⼀个函数名)
jieguo=re.arch(r'a|c','bac').group()
print(jieguo)
#>>输出结果 ‘a’
这时候我们看到arch函数就可以匹配到我们的a了。
我们只要记住match函数必须从头开始匹配,只要没匹配到都报错。
表达式 [ ] 的使⽤⽅法
[ ] 是匹配字符集中的⼀个字符
我们先来⼀段代码看看,匹配字符集 [abc]
import re
#[ ] 是匹配字符集中的⼀个字符
jieguo=re.match(r'[abc]','a').group()
print(jieguo)
#>>输出结果  ‘a’
我们发现匹配出我字符集 [abc] ⾥⾯的其中⼀个字符了,那么我们在字符集后⾯加⼀个2看看他会匹配出什么:
jieguo=re.match(r'[abc]2','a').group()
print(jieguo)
#>>输出结果
jieguo=re.match(r'[abc]2','a').group()
AttributeError:'NoneType'object has no attribute 'group'
我们看到报错了,有⼈就问为啥匹配不到呢?因为我们要匹配的内容为字符集([abc])中的⼀个字符后⾯再加⼀个2是不是相当于我们要匹配的是:
a2 或者 b2 或者 c2
但是我们匹配的字符串只有⼀个a是不是不满⾜条件?所以报错了
我们接着写⼀个代码来看看:(我们来匹配“速度与激情6”)
jieguo=re.match(r'速度与激情[123456]','速度与激情6').group()
print(jieguo)
#>>输出结果  ‘速度与激情6’
我们成功匹配出我们要的结果,然后我们尝试⼀下“速度与激情9”试试
jieguo=re.match(r'速度与激情[123456]','速度与激情9').group()
print(jieguo)
#>>输出结果
jieguo=re.match(r'速度与激情[123456]','速度与激情9').group()
AttributeError:'NoneType'object has no attribute 'group'
我们发现他报错了,为什么?因为我们字符集⾥⾯没有9所以不⾏。有⼈⼜问了,我们如果试⼀下“速度与激情12”可不可以,看⼀下代码:
jieguo=re.match(r'速度与激情[123456]','速度与激情12').group()
print(jieguo)
#>>输出结果 ‘速度与激情1’

本文发布于:2023-07-07 21:46:54,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/170364.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:匹配   结果   字符集   输出   出来
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图