目录

1.为什么使⽤正则表达式

2.正则表达式的组成

3.正则常⽤⽅法

3.1  re.match()​

3.2  re.search()​

3.3  re.findall()​

3.4  re.split​

3.5  re.sub和re.subn

3.6  re.group()和re.groups()

3.7  compile

4.练习


正则表达式

正则表达式是对字符串操作的⼀种逻辑公式,就是⽤事先定义好的⼀些特定字符、及这些特定字符的组合,组成⼀个“规则字符串”,这个“规则字符串”⽤来表达对字符串的⼀种过滤逻辑。

  • 需要引⼊内置模块re
  • 缺点:效率低下,能⽤字符串⽅法完成尽量使⽤字符串的⽅法
  • 优点:编码简单

1.为什么使⽤正则表达式

使⽤场景

  • 敏感词过滤
  • ⼿机、邮箱等验证
  • 爬⾍

2.正则表达式的组成

  • 原⼦ 组成正则表达式的最⼩单位,任何字符都可以

  • 量词 量词能够增强原⼦的描述能⼒

  • 模式修正符

注意:

  • 模式字符串⼀定要使⽤原⽣字符串,也就是⽤r开头的字符串。 r'www'
  • 严格区分⼤⼩写
  • 如果正则表达式中有{, }, [,],-,?,*,|^,$,.等做普通字符,则要将其转义

3.正则常⽤⽅法

3.1  re.match()

3.2  re.search()

3.3  re.findall()

3.4  re.split

3.5  re.sub和re.subn

3.6  re.group()和re.groups()

⽤于提取⼦元素,模式中⼀个括号就是⼀个⼦元素, group和groups只能在match和search⽅法⾥使⽤,通过返回的match object获取⼦元素。在模式串和sub和subn中的替换字符串中可以使⽤\1, \2, \3....来引⽤⼦元素

3.7  compile

当我们使⽤正则表达式时, re模块会⼲两件事

1、编译正则表达式,如果正则表达式本身不合法,会报错

2、⽤编译后的正则表达式去匹配对象

编译正则表达式使⽤compile

4.练习

⽤户名匹配:由数字、⼤⼩写字⺟、下划线 _ 和中横线 - 组成,⻓度为4到14位,并且不能以数字开头。
把下划线命名(也叫蛇形命名,所有单词都是⼩写,中间通过下划线连接),转化为⼩驼峰命名法(第⼀个单词⼩写,其余所有单词⾸字⺟⼤写)。例如'go_to_next_page',转化后改写为'goToNextPage'。要求:⽤正则表达式替换
匹配邮箱
匹配⼿机号
匹配身份证号。
匹配URL地址
匹配⽇期
匹配QQ号
匹配微信号
匹配⻋牌号

def user_name():while 1:name = input("请输入用户名:")if len(name) > 3 and  len(name) <15 :re_name = re.compile(r'^[^\d]([0-9a-zA-Z])|(_-)')if re_name.match(name) != None:print("用户名输入成功:")return nameelse:print("用户名格式输入错误")print("用户名:由数字、⼤⼩写字⺟、下划线 _ 和中横线 - 组成,⻓度为4到14位,并且不能以数字开头。")else:print("用户名格式输入错误")print("用户名:由数字、⼤⼩写字⺟、下划线 _ 和中横线 - 组成,⻓度为4到14位,并且不能以数字开头。")user_name()

# 小驼峰替换
def replace(obj):obj = obj.group(0)res = [value.upper() for value in obj if obj.islower()]res = ''.join(res)# res = ''# for i in range(len(obj)):#     if obj[i].islower():#         res += obj[i].upper()#     else:#         res += obj[i]print(res)return res
str1 = input('请输入字符串:')
res = re.sub('_\w',replace,str1)
res = re.sub('_','',res)
print(res)
# 匹配手机号
def phone():phone_num = input("请输入手机号:")ret = re.match(r'^1(([3578]\d)|(47))\d{8}$',phone_num)if ret != None:print('是手机号')else:print('不是手机号')
phone()
# 匹配邮箱
def emil():emil_name = input('请输入邮箱:')# ret =re.match(r'\w{1,10}((@qq.com)|(@126.com)|(@163.com))$',emil_name)ret =re.match(r'[0-9a-zA-Z]{1,10}((@qq.com)|(@126.com)|(@163.com))$',emil_name,re.I)print(ret)if ret != None:print('邮箱正确')else:print('邮箱格式不对')
emil()

正则表达式_月隐学python第20课相关推荐

  1. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  2. 函数进阶_月隐学python第11课

    目录 1.函数类型 2. 匿名函数 3.传入函数(理解) 4.闭包 5.偏函数 6.变量的作用域 6.1 变量作用域的分类 6.2 变量作⽤域查找规则 6.3 全局变量和局部变量 6.4 global ...

  3. 字符串_月隐学python第7课

    一.字符串 字符串就是由若干个不同的unicode字符组成的不可变序列 1 .字符串创建 2.获取字符 因为是不可变序列,所以不能修改单个字符: 凡是修改字符串的操作都产生新串 3.字符串转义 常⻅转 ...

  4. 列表_月隐学python第6课

    在python中,有这样一些类型,它们的成员是有序排列的,并且可以通过下标访问成员,这些类型称之为有序序列,包括:列表.元组和字符串:其中列表的成员可修改,属于可变序列,字符串和元组,成员不可修改,属 ...

  5. 数据类型和运算符_月隐学python第3课

    1.类型判断 我们可以使⽤用type来返回数据类型和⽤用isinstance判断数据类型 2. 运算符和表达式 在数学上为了了计算结果,我们会写⼀一些式⼦子计算,例例如: 30 + 5 这是数学中的算 ...

  6. mysql基础_月隐学python第22课

    目录 ⼀.数据库基本概念 常⻅的数据库: MySQL简介 mysql的安装 linux下 windows下安装 ⼆. SQL 三.操作数据库 四.数据库表 例子: 五.数据类型 数值型 字符型​ ⽇期 ...

  7. 字典与集合_月隐学python第8课

    一.字典 字典属于无序列,元素存放无序,是通过哈希方式进行数据存取的,字典是一个可变容器,字典中保存一个的键值对: key : value.我们通过key来获取对应的值,很类似我们的汉语字典. 字典中 ...

  8. mysql高级之子查询,多表查询,外连接,集合操作,内部函数与数据控制_月隐学python第24课

    目录 ⼀.⾼级 1.1 ⼦查询 1.2 多表查询 1.3 外连接 1.4 集合操作 1.5 内部函数 ⼆.数据控制 2.1 事务 2.2 授权管理 ⼀.⾼级 1.1 ⼦查询 ⼦查询嵌⼊到其他查询语句中 ...

  9. mysql练习_创建库与列表、增加列表信息、列表查询(包含多列表查询)_月隐学python第23课

    目录 一 .题目与设计 二  .运行结果 一 .题目与设计 SHOW DATABASES; drop DATABASE student;-- **********创建库**************** ...

最新文章

  1. 关于cocos2d的下载和安装
  2. 零基础自学python的app-零基础初学Python,需要装什么软件?
  3. 转载--tomcat整合apr
  4. 读取points文件
  5. Java 文件字符输入流FileReader读取txt文件乱码问题
  6. 【机器视觉】 convert_vector_to_tuple算子
  7. 【Android】Apk安装和删除
  8. python的计算_python 计算方位角实例(根据两点的坐标计算)
  9. linux借助expect完成自动登录
  10. 1-算法leetcode 876 快慢指针
  11. k近邻算法matlab实现_k近邻算法
  12. centos6.8下安装dc2012
  13. Windows Phone 7(WP7)开发 获取网络状态
  14. Java8新特性Stream流、Stream多字段排序
  15. 服务器 cpu系列 至强系列那个好,至强系列 intel至强和酷睿I系列,到底哪个好
  16. (附源码)spring boot校园购物网站 毕业设计041037
  17. 鸿蒙EMUI10升级体验,华为P30升级EMUI10,体验如何?我给大家说一说!
  18. 长波红外线灯的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 07.图6 旅游规划 [Dijkstra 算法]
  20. 2022“杭电杯”中国大学生算法设计超级联赛(8)

热门文章

  1. 阮一峰react demo代码研究的学习笔记 - demo10 debug
  2. CRM order lock will trigger product read API
  3. some example of SAP odata annotation in metadata
  4. 只要200行JavaScript代码,就能把特斯拉汽车带到您身边
  5. SAP CRM代码对数据库表COMM_PRODUCT的读写访问情况明细统计
  6. WordPress Restful API registration to Kyma WordPress API注册到Kyma的实现原理
  7. equipment download和CRM 的change history
  8. One order datatype 命名规范
  9. 如何自动打开function对应的ABAP class
  10. SAP CRM BSP repository 如何判断switch的状态