正则
一、正则的概念
思考一:如何去判断一个字符串是不是手机号
思考二:现在要求筛选出13开头的手机号怎么做呢
- 字符串匹配
一般我们要筛选出13开头的字符串可以如下
def phone(number):
number = str(number)
if len(number) == 11 and number.isdigit():
return True
else:
return False
使用正则以后就要简单很多
import re
r = re.match(r'13\d{9}','13347220022')
- 正则
正则表达式
正则表达式由需要匹配的字符串和一些特殊字符组成,可以在字符串当中匹配出需要查找的对象
匹配
通过正则表达式快捷的匹配出符合要求的特征字符串,比如利用病毒的特征值来查找文本中的病毒
二、元字符
思考一:正则表达式为什么如此强大呢?和字符串自带的方法有什么不同?
字符 | 作用 |
. | 通配符,匹配任意字符,除了\n |
\ | 正则转义 |
^ | 匹配字符串的开始位置,在[]中表示不取字符 |
$ | 匹配字符串的结束位置 |
{} | 匹配次数 |
* | 匹配0次或多次 |
+ | 匹配1次或多次 |
? | 匹配0次或1次 |
[] | 字符集合 |
() | 分组匹配 |
丨 | 或运算,分支条件 |
- 通配符
- 通配符匹配除了换行符之外的任意字符
- 转义符
- 正则中的反斜杠有其他的意义,因此要去掉字符串本身的转义,\b字符串\b表示单词边界
- 常见的还有这几种转义符
- 脱字符、美元符
- 脱字符匹配开头,必须是某个字符开头
- 美元符匹配字符结尾
- 次数匹配
- 大括号可以约定匹配的次数,注意0次也匹配了一次
- 三个次数匹配简化符号
- 贪婪和非贪婪匹配
- 贪婪模式会尽可能匹配出合适字符串,会有回溯的过程
- 非贪婪模式,会尽可能找到最短匹配的,减少回溯
- 集合
# 括号里面也可以放 . ? * () {} 等元字符
中括号是集合,主要脱字符在这里表示不取得意思
- 分组匹配
小括号表示分组,默认是保留口号内匹配上的内容
三、re模块
思考一:刚才使用了那么多re模块,那么re模块还有哪些方法需要我们掌握呢?
- re模块
- re模块是Python中支持正则书写的模块,需要用到正则表达式通常使用re模块去进行正则匹配
re.match函数
re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
re.search方法
re.search扫描整个字符串并返回第一个成功的匹配
re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回none,而re.search匹配整个字符串,直到找到一个匹配
re.compile函数
compile函数用于编译正则表达式,生成一个正则表达式(Pattern)对象,供match()和search()这两个函数使用
findall
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配,则返回空列表
注意:match和search是匹配一次,findall是匹配所有
四、本节课总结
1、正则表达式
掌握:正则的概念
2、元字符
掌握:元字符的使用
3、re模块
掌握:re模块的使用
五、上节课作业
1、利用装饰器,记录函数的运行次数
def func(f):
n = 0
def func1():
nonlocal n
f()
n += 1
print(f'当前函数执行了{n}')
return func1
@func
def test1():
print('test1-----------------')
@func
def test2():
print('test2-----------------')
2、打开一个只读文件,如果文件不存在,则去创建这个文件
try:
f = open('test.py','r')
except Exception as e:
print(e)
f = open('test.py','w')
else:
print('try里面未发生异常则执行')
finally:
f.close()
六、作业
1、检查用户名是否由字母数字下划线组成(字母或下划线开头)
2、检查用户输入的邮箱号是否符合规范
3、检查用户输入的身份证号码是否符合规范
4、检查用户输入的手机号是否符合规范
5、检查用户输入的密码是否符合规范(字符或下划线开头长度8-10)
6、模拟用正则获取爬虫爬取的数据