• python 正则表达式


    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
    import re
    # 正则表达式:re模块
    # 1.普通字符:大多数字符和字母都会跟自身匹配
    # re.fiandall() 返回一个列表

    #2.元字符:
    # . 通配符 一个只能匹配一个结果
    # ^ 以xx开头的匹配
    # $ 以xx为结尾的
    # * 重复 匹配0到多次
    # + 重复 匹配1到多次
    # ? 匹配0到1次
    # {m,n} 匹配前一个元字符m到n次
    # \ 转义字符 其后字符失去特殊元字符含义
    #[] 字符集 可匹配任意一个字符
    # | 或 逻辑表达式
    # d = [0-9] 匹配一个数字
    # D = [^0-9] 匹配非数字
    # s 匹配任意空白字符
    # S 匹配非空白字符
    # w =[a-zA-Z_] 匹配数字、字母、下划线中任意一个字符
    # W 匹配非数字、字母、下划线中的任意字符

    #3.模式
    # I 忽略大小写模式
    # L 字符集本地化
    # M 多行模式
    # S 此模式下.可匹配包括换行符在内的任意字符
    # X 冗余模式 忽略表达式中的空白和注释

    # findall(pattern, string, flags=0)
    str = "WoshiZhongGuoRen"
    regex0 = re.findall("guo",str)
    regex1 = re.findall("guo",str,re.I)
    print(regex0)
    print(regex1)


    str1 = '''where are you
    I an here
    oh I see'''

    index0 = re.findall("^w+",str1)
    index1 = re.findall("^w+",str1,re.M)
    print(index0)
    print(index1)

    #4.函数
    #邮箱正则表达式
    #compile(pattern, flags=0) 使用 compile 函数预编译出一个正则模式之后再去使用,这样在后面的代码中可以很方便的复用它
    #编译其实是很费时的,这样可以提升效率
    str2 = "23223whh./#$weijigh@126.comrtdfd"
    emailregex = re.compile("[0-9a-zA-Z_]{0,19}@[0-9a-zA-Z]{1,13}.[com,cn,net]{1,3}")
    index2 = emailregex.findall(str2)
    print(index2)#['weijigh@126.com']

    #match(pattern, string, flags=0)
    # 使用指定正则去待操作字符串中寻找可以匹配的子串, 返回匹配上的第一个字串,并且不再继续找
    #从字符串开始处开始查找的,如果开始处不匹配,则不再继续寻找,找不到时返回 None
    #web框架大量使用
    index3 = emailregex.match(str2)
    print(index3)#None

    #search(pattern, string, flags=0)
    #不限制正则表达式的开始匹配位置,匹配找到的第一个字符串
    index4 = emailregex.search(str2)
    print(index4)#<_sre.SRE_Match object; span=(12, 27), match='weijigh@126.com'>

    #split(pattern, string, maxsplit=0, flags=0)
    #maxsplit 指定切分次数
    #函数使用给定正则表达式寻找切分字符串位置,返回包含切分后子串的列表
    # 如果匹配不到,则返回包含原字符串的一个列表
    index5 =emailregex.split(str2)
    print(index5)#['23223whh./#$', 'rtdfd']

    #sub(pattern, repl, string, count=0, flags=0)
    #将正则表达式 pattern 匹配到的字符串替换为 repl 指定的字符串
    #参数 count 用于指定最大替换次数
    index6 = emailregex.sub('world',str2)
    print(index6)#23223whh./#$worldrtdfd

    #5.组(组与Match对象是Python正则式的重点)
    #分组的目的:从匹配到的结果中再次提取想要的部分结果
    #(?P<name>...) 分组的命名模式,取此分组中的内容时可以使用索引也可以使用name
    #(?P=name) 分组的引用模式,可在同一个正则表达式用引用前面命名过的正则
    str3 = "tom 19 05317652"
    p=re.compile(r'(?P<name>[a-z]+)s+(?P<age>d+)s+(?P<tel>d+).*', re.I)
    p.groupindex
    index7 = p.match(str3)
    print(index7)
    print(index7.group())
    print(index7.group('age'))
  • 相关阅读:
    关于ThreadLocal的理解
    常用Linux软件安装
    Spring事务注解@Transactional失效的问题
    使用jackson转换xml格式数据进行响应
    创建简单web程序了解servlet
    JDBC
    StringBuild类
    Canlendar 日期类
    Java Date 时间类的使用
    QWeb
  • 原文地址:https://www.cnblogs.com/wuxinyan/p/8727303.html
Copyright © 2020-2023  润新知