正则

一、正则的概念

思考一:如何去判断一个字符串是不是手机号
	思考二:现在要求筛选出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次

[]

字符集合

()

分组匹配


或运算,分支条件

  • 通配符
  • python 判断电话号码 是否为台湾 python题如何判断手机号码_python 判断电话号码 是否为台湾

  • 通配符匹配除了换行符之外的任意字符
  • 转义符
  • python 判断电话号码 是否为台湾 python题如何判断手机号码_字符串_02

  • 正则中的反斜杠有其他的意义,因此要去掉字符串本身的转义,\b字符串\b表示单词边界
  • python 判断电话号码 是否为台湾 python题如何判断手机号码_字符串_03

  • 常见的还有这几种转义符
  • 脱字符、美元符
  • python 判断电话号码 是否为台湾 python题如何判断手机号码_python_04

  • 脱字符匹配开头,必须是某个字符开头
  • python 判断电话号码 是否为台湾 python题如何判断手机号码_python 判断电话号码 是否为台湾_05

  • 美元符匹配字符结尾
  • 次数匹配
  • python 判断电话号码 是否为台湾 python题如何判断手机号码_正则_06

  • 大括号可以约定匹配的次数,注意0次也匹配了一次
  • python 判断电话号码 是否为台湾 python题如何判断手机号码_正则表达式_07

  • 三个次数匹配简化符号
  • 贪婪和非贪婪匹配
  • python 判断电话号码 是否为台湾 python题如何判断手机号码_正则表达式_08

  • 贪婪模式会尽可能匹配出合适字符串,会有回溯的过程
  • python 判断电话号码 是否为台湾 python题如何判断手机号码_正则_09

  • 非贪婪模式,会尽可能找到最短匹配的,减少回溯
  • 集合
# 括号里面也可以放 . ? * () {} 等元字符

中括号是集合,主要脱字符在这里表示不取得意思

  • 分组匹配

    小括号表示分组,默认是保留口号内匹配上的内容
    三、re模块
思考一:刚才使用了那么多re模块,那么re模块还有哪些方法需要我们掌握呢?
  • re模块
  • python 判断电话号码 是否为台湾 python题如何判断手机号码_正则表达式_10

  • 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-----------------')

python 判断电话号码 是否为台湾 python题如何判断手机号码_正则表达式_11


2、打开一个只读文件,如果文件不存在,则去创建这个文件

try:
    f = open('test.py','r')
except Exception as e:
    print(e)
    f = open('test.py','w')
else:
    print('try里面未发生异常则执行')
finally:
    f.close()

python 判断电话号码 是否为台湾 python题如何判断手机号码_python 判断电话号码 是否为台湾_12


六、作业

1、检查用户名是否由字母数字下划线组成(字母或下划线开头)

2、检查用户输入的邮箱号是否符合规范

3、检查用户输入的身份证号码是否符合规范

4、检查用户输入的手机号是否符合规范

5、检查用户输入的密码是否符合规范(字符或下划线开头长度8-10)

6、模拟用正则获取爬虫爬取的数据