zoukankan      html  css  js  c++  java
  • 正则表达式re模块

    正则表达式(RE)为高级文本模式匹配,以及搜索-替代等功能提供了基础。正则表达式(RE)是一 些由字符和特殊符号组成的字符串,它们描述了这些字符和字符的某种重复方式,因此能按某种模 式匹配一个有相似特征的字符串的集合,因此能按某模式匹配一系列有相似特征的字符串 。

    在 Python 专门术语中,有两种主要方法完成模式匹配:搜索(searching)和匹配(matching)。搜索,即在字符 串任意部分中查找匹配的模式,而匹配是指,判断一个字符串能否从起始处全部或部分的匹配某个 模式。搜索通过 search()函数或方法来实现,而匹配是以调用 match()函数或方法实现的。 

    下面为常用的匹配符合:

    元字符说明
    . 代表任意字符
    | 逻辑或操作符
    [ ] 匹配内部的任一字符或子表达式
    [^] 对字符集和取非
    - 定义一个区间
    对下一字符取非(通常是普通变特殊,特殊变普通)
    * 匹配前面的字符或者子表达式0次或多次
    *? 惰性匹配上一个
    + 匹配前一个字符或子表达式一次或多次
    +? 惰性匹配上一个
    ? 匹配前一个字符或子表达式0次或1次重复
    {n} 匹配前一个字符或子表达式
    {m,n} 匹配前一个字符或子表达式至少m次至多n次
    {n,} 匹配前一个字符或者子表达式至少n次
    {n,}? 前一个的惰性匹配
    ^ 匹配字符串的开头
    A 匹配字符串开头
    $ 匹配字符串结束
    [] 退格字符
    c 匹配一个控制字符
    d 匹配任意数字
    D 匹配数字以外的字符
    匹配制表符
    w 匹配任意数字字母下划线
    W 不匹配数字字母下划线

    常用的写法:

    ‘[a-zA-Z0-9]':匹配字母或数字
    ‘[^abc]':匹配除abc之外的字母
    ‘p(ython|erl)'匹配Python和perl
    ‘(pattern)*'匹配0次或多次
    ‘(pattern)+'匹配1次或多次
    ‘(pattern){m,n}'匹配m_n次
    ‘(a|b)*c'匹配0-n次a或b后面紧跟c
    ‘^[a-zA-Z]{1}([a-zA-Z0-9._]){4,19}$'匹配20个字符以字母开始
    ‘^(w){6,20}$'匹配6-20个单词字符
    ‘^d{1,3}.d{1,3}.d{1,3}.d{1,3}$'匹配IP
    ‘^[a-zA-Z]+$'检查字符中只包含英文字母
    ‘w+@(w+.)w+$'匹配邮箱
    ‘[u4e00-u9fa5]'匹配汉字
    ‘^d{18|d{15}$'匹配身份证
    ‘d{4}-d{1,2}-d{1,2}'匹配时间
    ‘^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[,._]).{8,}$)'判断是否为强密码
    ‘(.)\1+'匹配任意字符的一次或多次出现

    # --*-- coding=utf-8--*--
    
    import re # 导入re库
    
    ptn = re.compile(r'hello')
    
    # 使用ptn作为文本匹配
    m1 = ptn.match('hello world')
    m2 = ptn.match('')
    print(m1)
    print(m2)
    # 如果匹配到返回结果,匹配不到返回None
    # m1结果:<_sre.SRE_Match object; span=(0, 5), match='hello'>
    # m2结果:None
    
    
    # '^ab+'表示匹配以ab开头的字符串
    m1 = re.search('^ab+', 'asbfrfgbbbb')
    m2 = re.search('^ab+', 'absffdf')
    print(m1)
    print(m2.group())
    # group分组显示
    # m1结果:None
    # m2结果:'ab'
    
    
    # findall匹配所有符合的结果
    m = re.findall('hello', 'helloword, ddddhellossss')
    print(m)
    # 结果:['hello', 'hello']
    
    
    # finditer
    # 与findall类似,只不过返回的结果是一个迭代器,而findall返回的是列表
    
    
    # start返回匹配的开始位置
    # end返回匹配的结束位置
    m = re.search('^ab+', 'absffdf')
    print(m.start(),m.end())
    # 结果:0 2
    
    
    # sub用于替换字符串中的匹配项
    m = re.sub(' ','+','This is handsome boy')
    print(m)
    # 结果:This+is+handsome+boy
    
    
    # split分割
    m = re.split(' ','This is handsome boy')
    print(m)
    # 结果:['This', 'is', 'handsome', 'boy']
  • 相关阅读:
    Django Ajax知识
    Django走过的坑
    Django-8 聚合查询与分组查询
    Django-7 ORM多表操作
    Django-6 Django ORM层
    Django-5 模板层
    docker 常用批量操作
    K8S 从私有仓库拉取镜像
    linux制作iso文件
    二进制安装docker
  • 原文地址:https://www.cnblogs.com/tynam/p/8707572.html
Copyright © 2011-2022 走看看