当前位置: 首页 > news >正文

python正则表达式和递归

一、正则表达式

1.基础匹配

学习目标:了解什么是正则表达式,掌握re模块的基础使用

就是一种规则的定义,通过规则去验证给定的目标是否符合定义的规则。

正则的三个基础方法

match

match是匹配开头,开头有python就算匹配成功,没有就是不成功,只要开头不匹配后面的根本不关心。

span(0,6)说的是下标从0到6

search

从头开始找,只找一个,后面的不予理会

findall

找出来所有相匹配的数据,以列表的形式输出出来。

"""
演示python正则表达式re模块的3个基础匹配方法
"""
import re
s = "1python itheima python"
# match 从头匹配
result = re.match("1python",s)
print(result)
print(result.span())
print(result.group())
# search 搜索匹配
result = re.search("python",s)
print(result)# findall 搜索全部匹配
result = re.findall("python",s)
print(result)

总结

2.元字符匹配

学习目标:掌握正则表达式的各类元字符规则,了解字符串的r标记的作用。

单字符匹配

因为反斜杠\有具体的含义,可能代表转义字符,所以给字符串一个r标记,表示字符串中转义字符无效,就是普通字符的意思。

找出全部的数字

找出特殊符号  \W(大写的W)

找出全部英文字母

使用[],[]里面可以写想要的规则范围,可以自己规定范围

元字符匹配

小练习

findall如果我们的正则表达式里面有分组,就会把每一个组的结果都给你列出来

因此我们也可以使用match

"""
演示python正则表达式使用元字符进行匹配
"""
import re# 匹配账号,只能由字母和数字组成,长度限制6到10位
# r = '^[0-9a-zA-Z]{6,10}$'  # ^ $表示从头开始匹配,匹配到最后结尾。在正则里面,不要随意加空格。
# s = '124343'
# s1 = 'adhalod'
# s2 = '2s233s2'
# s3 = '...d7dd'
# print(re.findall(r,s))
# print(re.findall(r,s1))
# print(re.findall(r,s2))
# print(re.findall(r,s3))
# 匹配QQ号,要求纯数字,长度5~11,第一位不为0
# r = '^[1-9][0-9]{4,10}$'   # 不写范围就是默认是一个数
# s = '013131'
# s1 = '347834'
# s2 ='233ew23'
# print(re.findall(r,s))
# print(re.findall(r,s1))
# print(re.findall(r,s2))
# 匹配邮箱地址,只允许qq、163、gmail这三种邮箱地址
# 邮箱地址大体是{内容}.{内容}@{内容}.{内容}.{内容} acd.cdac.acd@qq.adf
r =r'(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)'
s = 's.ds.dsada.as@qq.aif.fdsiad'
print(re.match(r,s))

总结

二、递归

学习目标:掌握什么是递归,掌握递归案例的开发。

那么什么样的场景会用到递归呢?

比如来说,如果你是文件夹,我就再调用自己再进去看看,如果你不是,我就收集文件

就是说一个文件夹,进去发现是文件就返回给上一层,是文件夹就在进入这个文件夹看是文件还是文件夹,不断的返回给上一层最后就把全部的文件都收集到了

说起来比较抽象,让我们用代码演示一下。

实战演示

大家也可以自己创建一个如图所示的文件夹来试试代码能否正常运行。

"""
演示python进行排序
需求:通过递归,找出一个指定文件夹的全部文件思路:写一个函数,列出文件夹内的全部内容,如果是文件就收集到list
如果是文件夹,就递归调用自己,再次判断
"""
import os
def test_os():"""演示os模块的三个基础方法"""print(os.listdir("D:/test"))  # 可以帮我们列举出指定文件夹里面有哪些内容print(os.path.isdir("D:/test/a"))  # 判断你给的路径是否是一个文件夹print(os.path.exists("D:/test"))  # 判断指定路径是否存在def get_files_recursion_from_dir(path):print(f"当前判断的文件夹是:{path}")file_list = []"""从指定的文件夹中使用递归的方式,获取全部的文件列表:param path:被判断的文件夹:return:list,包含全部的文件,如果目录不存在或者无文件就返回一个空list"""if os.path.exists(path):for f in os.listdir(path):new_path = path + "/" + fif os.path.isdir(new_path):# 进入到这里,表示这个目录是文件夹不是文件file_list += get_files_recursion_from_dir(new_path)else:file_list.append(new_path)else:print(f"指定的目录{path},不存在")return []return file_list
if __name__ == '__main__':print(get_files_recursion_from_dir("D:/test"))

总结

http://www.lryc.cn/news/483594.html

相关文章:

  • JAVA后端生成图片滑块验证码 springboot+js完整案例
  • Spring Boot中的自动装配机制
  • Brave127编译指南 Windows篇:配置Git(四)
  • mysql数据库(五)多表查询
  • 【go从零单排】JSON序列化和反序列化
  • 海外携程机票token 1001分析
  • 【算法】——二分查找合集
  • 社会工程骗局席卷金融机构
  • 前缀和算法习题篇(上)
  • C#核心(9)静态类和静态构造函数
  • B2002 Hello,World! C++实现
  • 前端-同源与跨域
  • MySQL远程连接错误解决:Host is not allowed to connect to this MySQL server
  • 详解C语言字符和字符串的输入与输出
  • adworld - stack2
  • Python学习从0到1 day28 Python 高阶技巧 ⑤ 多线程
  • nuget 管理全局包、缓存和临时文件夹
  • linux物理内存管理:node,zone,page
  • uniapp 设置安全区域
  • 渐进式JavaScript框架Vue 3 入门
  • 【真题笔记】21年系统架构设计师案例理论点总结
  • PostgreSQL的奥秘:深入探究事务与锁的秘密世界
  • Python进行GRPC和Dubbo协议的高级测试
  • 全程云OA系统QCPES.asmx存在SQL注入漏洞
  • 从建立TRUST到实现FAIR:可持续海洋经济的数据管理
  • 基于SSM的“汽车销售分析与管理系统”的设计与实现(源码+数据库+文档+PPT)
  • vs2015QT项目添加多语言翻译总结
  • 替换OpenTSDB和HBase,宝武集团使用IoTDB助力钢铁设备智能运维
  • MathGPT的原理介绍,在中小学数学教学的应用场景,以及代码样例实现
  • 前端框架大比拼:React.js, Vue.js 及 Angular 的优势与适用场景探讨