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

    正则表达式(Regular Experssion)是对字符串操作的一种逻辑公式. 简称regex或re

    优点 : 灵活, 功能性强, 逻辑性强

    缺点 : 上手难. 

    工具 : 各大文本编辑器一般都有正则匹配功能,也可以去http://tool.chinaz.com/regex/进⾏行行在线测试. 

    1. 字符组 [a-zA-Z0-9] 

    2. 简单元字符(常用)

    .     匹配除换行符以外的任意字符
    w    匹配字母或数字或下划线
    s    匹配任意空白符
    d    匹配数字
    
        匹配一个换行符
    	    匹配一个制表符
        匹配一个单词的结尾
    ^     匹配字符串的开始
    $     匹配字符串的结尾
    W    匹配非字母或数字或下划线
    D    匹配非数字
    S    匹配非空白符
    a|b   匹配字符a或字符b
    ()    匹配括号内的表达式,也表示一个组
    [...] 匹配字符组中的字符
    [^...]匹配除了字符组中的字符的所有字符

    3.量词(一次性匹配多个字符)

    *    重复0次或者更多次
    +    重复1次或者更多次
    ?    重复0次或者1次
    {n}  重复n次
    {n,} 重复n次或者更多次
    {n,m}重复n到m次

    4.惰性匹配和贪婪匹配

    在量词中的 * , + , {} 都属于贪婪匹配.尽可能匹配到多的结果

    .*? 则是尽可能少匹配,表示惰性匹配. 例: .*?x 是找到下一个x位置

    5.分组       正则中使用()进行分组. 

    6. 转义   特殊意义的元字符如 或者s,如果需要匹配对应的字符串,需要对进行转义.由于Python中的特殊字符也需要转义,比较复杂,因此使用 r' '即可,这是只需要正则表达式内部转义即可r'\n'   →  ' '

    re模块

    re模块是python提供的一套关于处理正则表达式的模块.核心功能有四个:

    1.findall 查找所有.返回list

    import re
    lst = re.findall('a' , 'happy birthday!!')
    print(lst)               #['a', 'a']
    lst = re.findall(r'd+' , '5apple6banana')
    print(lst)                #['5', '6']

    2.search 会进行匹配.但如果匹配到了第一个结果,就会返回这个结果.如果匹配不到search返回的则是None

    ret = re.search('a','happy birthday!!') #<re.Match object; span=(1, 2), match='a'>
    print(ret)  #a

    3.match 只能从字符串的开头进行匹配

    import re
    ret = re.match('a','apply apple').group()
    print(ret)   #a

    4.finditer 和 findall差不多.只不过返回的是迭代器

    import re
    it = re.finditer('d' , 'apple6 banana7')
    for el in it:
        print(el.group(), end=' ') #6 7 

    5.其他操作

    ret = re.split('[ab]', 'qwerafjbcd')  # 先按a分割,再按b分割
    print(ret)  # ['qwer', 'fj', 'cd']
    
    ret = re.sub(r"d+", "_a_", "alex250ta")  # 把字符串中的数字换成_a_
    print(ret)   #alex_a_ta
    
    ret = re.subn(r"d+", "_a_", "alex250ta")  # 把字符串中的数字换成_a_返回元组包含次数
    print(ret)    #('alex_a_ta', 1)
    
    obj = re.compile(r'd{3}')    #将这则表达式编译成正则表达式对象
    ret = obj.search('abc123eeee')    匹配字符串
    print(ret.group())     #123
  • 相关阅读:
    When to Partition a Table and an Index
    Hello, world
    提交
    SubmitOncePage:解决刷新页面造成的数据重复提交问题
    压缩ASP.NET中的ViewState
    asp.net千奇百怪的日历
    ICallbackEventHandler实现
    xml數據
    CrystalReports
    [转]Microsoft Visual Studio 2005中使用水晶报表
  • 原文地址:https://www.cnblogs.com/gracenana/p/10222753.html
Copyright © 2011-2022 走看看