正则

一、栈和队列

1.栈

抽象成一个开口向上的容器【羽毛球球筒】

在列表一端进行操作(添加,删除)。

  • 特点:先进后出
#创建一个栈【列表】
my_stack = []

#入栈【向栈中存数据】:append
my_stack.append(23)
print(my_stack)
my_stack.append(30)
print(my_stack)
my_stack.append(4)
print(my_stack)

#出栈【从栈中取数据】:pop
#pop每调用一次,则取出一个数据,先添加进去的最后被取出来【先进后出】
my_stack.pop()
print(my_stack)
my_stack.pop()
print(my_stack)
my_stack.pop()
print(my_stack)

2.队列

queue抽象成一个水平放置的水管

  • 特点:先进先出
import  collections

#创建队列
queue = collections.deque([12,43,8,10])
print(queue)


#入队【存数据】,append
queue.append(66)
print(queue)
queue.append(77)
print(queue)
#deque([12, 43, 8, 10, 66, 77])

#出队【取数据】,popleft
queue.popleft()
print(queue)
queue.popleft()
print(queue)
queue.popleft()
print(queue)

二、文件和目录

1. os模块

需要引入os模块

1.1 os基本方法

函数名函数值
os.name获取当前的操作系统的类型nt->windows posix->unix 后者Linux
os.environ获取操作系统中的环境变量
os.environ.get(“path”)获取path的环境变量
os.curdir获取当前的目录
os.getcwd()获取当前的工作目录
**os.listdir() ****以列表的形式 返回当前目录的文件
os.mkdir()创建目录
os.rmdir()删除目录
os.rename(old,new)修改文件后者文件夹的名字
os.remove()删除文件
os.system(command)执行系统命令
**os.walk(path) ****遍历目录
os.path.join(path1,path2)将path1和path2拼接成一个正常的路径
os.path.splitext()获取文件扩展名
**os.path.isdir() ****判断是否是目录
**os.path.isfile() ****判断是否是文件
**os.path.exists() ****判断文件或者目录是否存在
**os.path.getsize() ****获取文件的大小(字节)
os.path.dirname()获取路径的目录名
os.path.basename()获取路径的文件名
os.path.abspath()返回文件的绝对路径
os.path.split()拆分路径

1.2 目录的遍历

  • 深度优先
  • 广度优先遍历

三、正则表达式

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

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

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

  • 使用场景
    • 敏感词过滤
    • 手机、邮箱等验证
    • 爬虫

2.正则表达式的组成

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

    原子含义原子含义
    \d0-9中任何一个字符\w0-9a-zA-Z_的中任何一个字符
    \D非0-9中的任何一个字符 [^0-9]\W非0-9a-zA-Z_的中任何一个字符[^0-9a-z_A-Z]
    \s\n\r\t 空格.代表除\n之外的任何字符
    \S非\n\r\t 空格中任何一个字符[^\n\t\r ]\b词边界
    []自己创建的原子表,[0-4]代表0-4中任何一个字符\B非词边界
    [^]排除原子表中的字符\A字符串开始
    ^行首;在原子表中表示排除\Z字符串的结尾
    $行结尾-表示域,0-9就表示0到9所有数字字符
  • 元字符
    元字符能够增强原子的描述能力

    元字符含义元字符含义
    {}表示重复前一个原子的次数*重复0次或多次 {0,}
    {m}表示重复前一个原子的m次+至少出现1次 {1,}
    {m,n}表示重复前一个原子的最少m次,最多n次?出现0次或1次 {0,1}
    {m,}表示重复前一个原子的最少m次*?,+?取消贪婪
    ()改变优先级,取子元素x|y表示匹配x或者y
  • 模式修正符

    修饰符含义修饰符含义
    re.S使.匹配所有字符re.I不区分大小写
    re.L本地化识别re.M多行匹配
    re.U根据Unicode字符集解析字符,会影响\b、\B、\w、\W

注意:

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

3.正则常用方法

  • re.match()

    原型:re.match(pattern,string,flags=0)
    功能:从字符串起始位置匹配一个模式,如果不是从起始位置匹配则返回None
    参数:patter  模式
         string  要匹配的字符串
         flag    模式修正符
    返回值: 匹配成功返回一个Match object,失败返回None
    
    print(re.match(r'www','www.baidu.com'))
    print(re.match(r'www','http:///www.baidu.com')) #None
    print(re.match(r'www','cctv.www.baidu.com'))  #None
    
  • re.search()

    原型:re.search(pattern, string, flags=0)
    功能:顺序扫描字符串,找到第一个匹配项结束
    参数:patter 模式
         string  要匹配的字符串
         flag  模式修正符
    返回值:匹配成功,返回match object,否则返回None
    
    print(re.search(r'll','hello'))
    print(re.search(r'll','heLLo',re.I))
    
  • re.findall()

    原型:findall(pattern, string, flags=0)
    功能:扫描整个字符串,并返回结果列表
    参数:patter: 匹配的正则表达式
    	 string: 要匹配的字符串
    	 flags:模式修正符
    返回值:如果匹配成功返回一个列表,包含了所有匹配项,失败返回空列表
    print(re.findall(r'oo','kksdkoosdflsdfooksdfsdoOppppweOo',re.I)) #['oo', 'oo', 'oO', 'Oo']
    
  • re.split

    原型:split(pattern, string,maxsplit=0,, flags=0)
    功能:用模式做分隔符,将字符串分隔,返回分隔列表,如果模式加上括号,则分隔符会被保留
    参数:patter: 匹配的正则表达式
         string: 要匹配的字符串
         maxsplit 匹配次数,0不限制次数
         flags:模式修正符
         
    print(re.split(r'\d|,|;','w1w2w3w,w;w'))#['w', 'w', 'w', 'w', 'w', 'w']
    
  • re.sub和re.subn

    sub(pattern, repl, string, count=0)
    subn(pattern, repl, string, count=0)
    功能:在目标字符串中以正则表达式的规则匹配字符串,再把他们替换成指定的字符串。可以指定替换的次数,
         如果 不指定,替换所有的匹配字符串
    参数:
        pattern:  正则表达式(规则)
        repl:     指定的用来替换的字符串
        string:   目标字符串
        count:    最多替换次数
    区别:前者返回一个替换后的字符串,后者返回一个元组,第一个元素替换后的字符串,
         第二个元素表示被替换的次数
    print(re.sub(r"(good)", "nice", "cheng is good man"))
    print(re.subn(r"(good)", "nice", "cheng is good man"))
    
  • re.group()和re.groups()

    用于提取子元素,模式中一个括号就是一个子元素,group和groups只能在match和search方法里使用,通过返回的match object获取子元素。在模式串和sub和subn中的替换字符串中可以使用\1,\2,\3…来引用子元素

    m = re.match(r"(\d{3})-(\d{8})", "010-53247654")
    #使用序号获取对应组的信息,group(0)一直代表的原始字符串
    print(m.group(0))
    print(m.group(1))
    print(m.group(2))
    #查看匹配的各组的情况
    print(m.groups())
    
  • compile

    当我们使用正则表达式时,re模块会干两件事
    1、编译正则表达式,如果正则表达式本身不合法,会报错
    2、用编译后的正则表达式去匹配对象

    编译正则表达式使用compile

    原型:re.compile(pattern, flags=0)
    功能:将正则表达式模式编译成正则表达式对象,其 match() 和 search() 方法可用于匹配
    参数:pattern 模式
         flags 模式修正符
    
    re_telephon = re.compile(r"^1(([3578]\d)|(47))\d{8}$") #编译,返回
    print(re_telephon.match("13600000000")) #
    

4.应用实例

  • 看样子
  • 写一点,测一点
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值