• python-正则表达re模块


    '''
    正则表达式
    regular expression
    正则表达式是一种特殊的字符序列,可以理解成就是字符串
    只不过这个字符串要比原始字符串强大
    正则表达式使用场景:
    注册设置密码时 不允许有特殊字符,密码的个数是多少位
    爬虫时,使用正则抓取页面中的指定数据
    正则表达式的使用原则:
    处理字符串的强大工具 有自己的语法一级独立处理引擎
    效率不如系统自带,但币自带强大
    如系统提供可解决,尽量使用自带
    导入模块re
    '''
    '''
    1.match:是否以正则字符串的内容开头 校验是否满足正则对应内容

    第一个参数 :正则语法字符串
    第二个参数: 要进行校验的字符串
    第三个参数: 设置校验过程中的配置属性
    '''
     1 import re
     2 
     3 #如果返回结果是none 就表示匹配失败
     4 #如果是一个match对象 就表示匹配成功
     5 res= re.match("啦啦啦",'啦啦啦 哈哈哈 咳咳咳')
     6 print(res)#<re.Match object; span=(0, 3), match='啦啦啦'>
     7 '''
     8 ^x --表示以这个字符串以x开头
     9 x$ --表示的是字符串以x结尾
    10 '''
    11 res= re.match("^啦啦啦$",'啦啦啦 哈哈哈 咳咳咳')
    12 print(res)#None
    13 #如果返回结果None 表示匹配失败
    14 #如果是一个match对象 就表示匹配成功
    '''
    2.search方法
    按照正则规则 在待校验的字符串中 查找是否有指定格式的数据 有的话 返回查找到的第一个match对象
    没有的话返回None
    正则语句中,表示通配符,能匹配的是除了 之外的任意一个符号
    '''
    
    
     1 pattern = 'c.t' #要找的数据时ct 组合之间有任意一个字符
     2 src_str ="lll cat crt"
     3 res =re.search(pattern,src_str)
     4 print(res)#<re.Match object; span=(4, 7), match='cat'>
     5 
     6 #从match对象中获取匹配到的对象
     7 data = res.group()
     8 print(data)
     9 #获取这个数据在原串中的区别
    10 start_end = res.span()
    11 print(start_end)#(4, 7)
    
    
    '''
    findall:在待校验的字符串中查找所有满足正则语法的字符串,
    如果有的话吧匹配到的内容到的尼尔存放在列表中
    没有匹配到数据 结果就是空列表
    '''
    
    
    1 pattern = 'c.t' #要找的数据时ct 组合之间有任意一个字符
    2 src_str ="lll cat crt"
    3 res =re.findall(pattern,src_str)
    4 print(res)#['cat', 'crt']
    
    
    '''
    finditer:
    在待校验的字符串中查找所有满足正则语法的字符串,
    有的话 匹配到的内容对用match存方在一个迭代中
    没有匹配到数据 结果就是一个空迭代
    '''
    
    
    1 pattern = 'c.t' #要找的数据时ct 组合之间有任意一个字符
    2 src_str ="lll cat crt"
    3 res =re.finditer(pattern,src_str)
    4 print(res)#['cat', 'crt']
    5 #遍历
    6 for data in res:
    7     print(data)
    8 #<re.Match object; span=(4, 7), match='cat'>
    9 #<re.Match object; span=(8, 11), match='crt'>
    
    
    '''
    替换操作sub
    系统的祖父穿中也有一个替换的方法 relace
    需要替换什么内容 指定内容替换 替换个数
    '''
    
    
     1 src_str ="啦啦啦 是不是脑子有坑"
     2 #把坑替换成水
     3 replace_str = src_str.replace('','')
     4 print(replace_str)#啦啦啦 是不是脑子有水
     5 
     6 #只替换一个
     7 src_str ="啦啦啦 咳咳"
     8 #把咳替换成啦
     9 replace_str = src_str.replace('','',1)
    10 print(replace_str)#啦啦啦 啦咳
    11 
    12 src_str = '你好00, 我是五七57'
    13 #去除字符中数字
    14 
    15 #遍历原串
    16 for ch in src_str:
    17     #isdigit判断是否是纯数字
    18     #吧替换完成的内容赋值到变量src_str
    19     if ch.isdigit():
    20         src_str =src_str.replace(ch,'')
    21 print(src_str)#你好, 我是
    22 
    23 #用正则表达式
    24 #正则语法[0-9]匹配0到9中任意一个数字
    25 # res = re.sub('[0-9]]',src_str)
    26 # print(res)#你好, 我是五七
    
    
    '''
    split切割
    将正则语法匹配到的尼尔作为切割符 切割指定的字符串
    '''
    
    
    1 src_str = 'i26372hh387hdgddl'
    2 #以数字切割符 切割字符串 获取单词
    3 res = re.split('[0-9]+', src_str)
    4 print(res)#['i', '', '', '', '', 'hh', '', '', 'hdgddl']
    5 #增加+号去除“”['i', 'hh', 'hdgddl']

    1 '''
    2 正则表达式中的语法
    3 '''
    4 #(.)在正则表达式中表示的是通配符 匹配 的是除了
    之外的任意字符
    5 s = 'ggg
    hhh%%%——'
    6 res = re.findall(".",s)
    7 print(res)#['g', 'g', 'g', 'h', 'h', 'h', '%', '%', '%', '—', '—']
    8 
    9 #集合匹配[] 匹配的是中括号中列出的任意一个字符
    '''
    [0-9]--匹配任意一个数字
    [a-z]--匹配任意小写字母
    [A-Z]--匹配任意大写字母
    [0-9A-Za]-- 匹配的是数字,字母中任意一个符号
    [adhueur]--pip的是adhueur中任意字符
    [^0-9]--匹配任意非数字字符
    '''
    1 s = '3746873hdshdg$$#^$_'
    2 res = re.findall("[0-9a-z_]",s)
    3 print(res)#['3', '7', '4', '6', '8', '7', '3', 'h', 'd', 's', 'h', 'd', 'g', '_']
    #正则表达式中的转义符
    #只想匹配英文符号.---匹配的是点本身的含义
    #在这种时候 就需要进行转义 让其保持本意
    #ip 地址校验 0.0.0.0 3673@qq.com
    1 res = re.match(".","o")
    2 print(res) #None
    '''
    d -- 与[0-9]等价 表示的是0-9 中任意一个字符
    D --与[^0-9]等价 表示的是非0-9中任意一个字符
    w --匹配的是数字 字母 下划线 汉字 中任意一个符号
    W --将w取反 匹配的是非数字 字母 下换线 汉字中的任意一个符号
    '''
    1 res = re.match('d','m')
    2 print(res)
    3 
    4 res =re.match('D','O')
    5 print(res)#<re.Match object; span=(0, 1), match='O'>
    6 
    7 res = re.match('w','')
    8 print(res)#<re.Match object; span=(0, 1), match='哈'>
    '''
    量词
    *表示前面的符号连续出现任意次
    + 表示前面的符号连续出现至少一次
    ? 表示前面的符号连续出现最多一次
    {m} 表示前面的符号联系出现m次 m n是数值
    {m,n}表示前面的符号连续出现至少m次,最多n次
    '''
    
    
     1 res = re.match('.*','hsgdhs')
     2 print(res)#<re.Match object; span=(0, 6), match='hsgdhs'>
     3 
     4 res = re.match('.+','')
     5 print(res)#None
     6 
     7 res = re.match('^.{$}','666')
     8 print(res)#None
     9 
    10 res = re.match('^.{$}','888')
    11 print(res)#None
    12 
    13 res = re.match('^.{3,6}','888')
    14 print(res)#None
    
    
    #分组
    '''
    ()匹配一个整体符号的
    比如 163 qq sina
    [163]
    | 表示的是或者的关系
    邮箱验证: 163 qq sina中的任意一个
    邮箱格式:
    数字 字母 下划线开头 个数6到12位
    @163|qq|sina.com
    '''
    
    
    1 pattern ="^[0-9a-zA-Z_]{6,8}@(163|qq|sina).com$"
    2 email = input("请输入一个邮箱:")
    3 res =re.match(pattern,email)
    4 if res != None:
    5     print(f"{email}是合法的")
    6 
    7 else:
    8     print(f"{email}不合法")
    
    
    
     
     
     
     
  • 相关阅读:
    MFC基于对话框的程序添加菜单
    iOS远程推送原理及实现过程
    基于SolrCloud的内容搜索和热点推送
    Android 常用抓包工具介绍之Charles
    帮你快速实现全景应用性能可视化
    Android常用抓包工具之TcpDump
    JAVA IO 序列化与设计模式
    《2015中国移动应用性能管理白皮书》欢迎来看
    利用听云Server和听云Network实测Kubernetes和Mesos在高并发下的网络性能
    魅族电商运维之路
  • 原文地址:https://www.cnblogs.com/cheng10/p/13536978.html
Copyright © 2020-2023  润新知