zoukankan      html  css  js  c++  java
  • Python正则表达式

    一、简介

    正则表达式不是Python特有的语言,它是一门通用语言,在各类的编程语言中,都有引用,它的主要作用是用于处理字符串,它的功能非常强大,这里我只是介绍在Python内的一些操作

    二、元字符

    在介绍使用时候,不可避免要先了解元字符,下表只是列出常用的元字符。

     

    三、根据前面的元字符,进行举例:

    在使用Python的正则表达式前,需要先导入re模块,在这里我们是用findall进行举例:

    函数参数说明:

     

    1、"."例子:

    var = re.findall('exm.ple', 'example')
    print(var)
    #输出,如成功匹配,会输出一个列表,否则是以空列表
    ['example']
    注意"."只匹配一个字符

    2、"^"例子:

    var = re.findall('^exam', 'example')
    print(var)
    # 输出
    ['exam']

    3、"$"例子:

    var = re.findall('ple$', 'example')
    print(var)
    # 输出
    ['ple']

    4、"*"例子:

    var = re.findall('x*a', 'exxxample')
    print(var)
    # 输出
    ['xxxa']

    这里要强调一下,一定是"*"前面的字母0次或多次

    5、"+"例子:

    var = re.findall('ex*a', 'eample')
    print(var)
    # 输出
    ['ea']
    
    var = re.findall('ex+a', 'eample')
    print(var)
    # 输出
    []

    6、"?"例子:

    var = re.findall('ex?a', 'eample')
    print(var)
    # 输出
    ['ea']
    
    var = re.findall('e?a', 'eample')
    print(var)
    # 输出
    ['ea']

    7、"{ }"例子:

    var = re.findall('ex{1}a', 'example')
    print(var)
    # 输出
    ['exa']
    
    var = re.findall('ex{2}a', 'example')
    print(var)
    # 输出
    []

    8、"{m,n}"例子:

    var = re.findall('ex{1,5}a', 'exxxample')
    print(var)
    # 输出
    ['exxxa']
    
    var = re.findall('ex{,5}a', 'eample')
    print(var)
    # 输出
    ['ea']
    
    var = re.findall('ex{1,}a', 'exxxxxxxxxxample')
    print(var)
    # 输出
    ['exxxxxxxxxxa']

    9、"[ ]"例子:

    var = re.findall('e[a-z]a', 'example')
    print(var)
    # 输出
    ['exa']
    
    var = re.findall('e[a-z]a', 'exxample')
    print(var)
    # 输出
    []

    10、"[^]"例子:

    var = re.findall('e[x]a', 'example')
    print(var)
    # 输出
    ['exa']
    
    var = re.findall('e[^x]a', 'example')
    print(var)
    # 输出
    []

    11、"[*]"例子:

    var = re.findall('e[x*]a', 'example')
    print(var)
    # 输出
    ['exa']
    
    var = re.findall('e[x*]a', 'e*ample')
    print(var)
    # 输出
    ['e*a']

    四、特殊字符

    这里只单独对""进行一个解释

    var = re.findall(r'i', 'i am big')  # 只匹配单词i
    print(var)
    # 输出:
    ['i']
    
    var = re.findall(r'i', 'i&am big')  # 只匹配单词i
    print(var)
    # 输出:
    ['i']
    
    var = re.findall(r'app', 'myapp app aapple')
    print(var)
    # 输出
    ['app']

     这里注意一下,一定要加r,建议以后在进行正则的时候都加上r

    五、设置flags不区分大小写

    var = re.findall('com', 'COMwww')  # 默认区分大小写
    print(var)
    # 输出
    []
    
    var = re.findall('com', 'COMwww', re.I)  # 通过修改flag,支持不区分大小写
    print(var)
    # 输出
    ['COM']

    六、re模块下的方法

    1、sub字符串替换

    sub(pattern,repl,string,count,flags)

    var = re.sub('a', 'b', 'aaaa')
    print(var)
    # 输出
    bbbb
    
    var = re.sub('a', 'b', 'aaaa',2)
    print(var)
    bbaa

    2、subn不但进行字符串替换,还在最后告诉你替换的次数

    var = re.subn('a', 'b', 'aaaa')
    print(var)
    # 输出
    ('bbbb', 4)

    3、split

    var = re.split('d+', 'one1two2three')
    print(var)
    # 输出
    ['one', 'two', 'three']
    a = re.split('[0-9]', 'aa22bb33cc44dd')
    print(a)
    
    a = re.split('[0-9]+', 'aa22bb33cc44dd')
    print(a)
    import re
    
    var = re.split('d+', 'one1two2three3')
    var_list = [i for i in var if i]
    print(var)  # 列表里面有空格
    print(var_list)  # 去掉列表内的空格
    
    # 输出
    ['one', 'two', 'three', '']
    ['one', 'two', 'three']

    4、match 较少是用

    只匹配字符串的起始位置,一旦匹配成功,就是一个match object对象,对象拥有以下几个方法:

    group() 返回被RE匹配的字符串

    start()返回匹配开始的位置

    end() 返回匹配结束的位置

    span() 返回一个元祖包含匹配(开始,结束)

    5、search,可以匹配

    七、分组

    正则分组:去已经提取到的数据中再进行提取数据

    1、search分组

    origin = "has"
    r = re.search("hw+", origin)
    print(r.group())  # 获取匹配到的所有结果
    # 输出
    has
    
    # 这个时候我要想把取出的has在进行过滤
    r = re.search("h(w+)", origin)
    print(r.group())  # 获取匹配到的所有结果
    print(r.groups())  # 获取模型中匹配到的分组结果
    print(r.groupdict())  # 获取模型中匹配到的分组结果
    # 输出
    has
    ('as',)
    {}
    
    r = re.search("h(?P<name>w+)", origin)
    # ?P<name>不代表任何过滤条件
    print(r.group())  # 获取匹配到的所有结果
    print(r.groups())  # 获取模型中匹配到的分组结果
    print(r.groupdict())  # 获取模型中匹配到的分组结果
    # 输出
    has
    ('as',)
    {'name': 'as'}

    2、findall分组

    origin = "has asdfasf hal"
    r = re.findall("h(w+)", origin)
    print(r)  # 获取匹配到的所有结果
    # 输出
    ['as', 'al']
    
    origin = "hasaabc asdfasf halaabc"
    r = re.findall("h(w+)aabc", origin)
    print(r)  # 获取匹配到的所有结果
    # 输出
    ['as', 'al']
    
    r = re.findall("h(w+)a(ab)c", origin)  # 整体先匹配hasaabc 和 halaabc,再进行分组
    print(r)  # 获取匹配到的所有结果
    # 输出
    [('as', 'ab'), ('al', 'ab')]

    3、split分组

    origin = "hello ab aaabbb"
    r = re.split('ab', origin, 1) # 未分组
    print(r)
    # 输出
    ['hello ', ' aaabbb']
    
    r = re.split('(ab)', origin, 1) # 分组
    print(r)
    # 输出
    ['hello ', 'ab', ' aaabbb']

    '(?P<name>...)' 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{'province''3714''city''81''birthday''1993'}

  • 相关阅读:
    sqlserver数据库备份还原时出现3241问题
    ssms安装失败_拒绝访问0x80070005解决方法
    Linux strace命令
    争议 | 要不要去IT外包公司工作?
    sqlserver计算时间差DATEDIFF 函数
    CodeForces
    [HNOI 2016] 网络
    CodeForces
    AtCoder Beginner Contest 209
    学习4412开发板+项目实战+配套视频+每日指导
  • 原文地址:https://www.cnblogs.com/chen1930/p/5938662.html
Copyright © 2011-2022 走看看