python re模块

我的未来我决定 提交于 2020-03-26 07:48:36
'''1.  元字符    符号 含义    .  匹配除换行以外的任意字符    ^  匹配字符串的开始位置,在[]中出现为非的意思     $  匹配字符串的结束位置    *  匹配0次、1次或多次前面的原子    ?  匹配0次或1次前面的原子    +  匹配1次或多次前面的原子    {n}    前面的原子恰好出现n次    {n,}   前面的原子至少出现n次    {n,m}  前面的原子至少出现n次,至多出现m次    |  模式选择符    () 模式单元符,作分组:在findall 中使用,返回的参数是()中匹配的值,不会管外面其他参数      (?:reg):取消优先级,在findall中使用,会返回满足全部正则的字符,而不是返回字符的一部分(reg是变量)      (?P<name>);给分组指定name. (name是变量)   [] 字符集,里面出现的字符都只表示某一个字符,不会有转义问题    eg:    [a-z0-9A-Z] 数字,大小写字母中的一个        通用字符    符号 含义    \w 匹配任意一个字母、数字或下划线    \W 匹配除字符、数字和下划线以外的任意一个字符    \d 匹配任意一个十进制数    \D 匹配除十进制数以外的任意一个其它字符    \s 匹配任意一个空白字符    \S 匹配除空白字符以外的任意一个其它字符    \b:表示字母数字与非字母数字的边界,     非字母数字与字母数字的边界。    \B:表示字母数字与(非非)字母数字的边界,非字母数字与非字母数字的边界。        eg:匹配以a开头的字符串    str = 'adfd fdfad1a 2 a31 fda a'    pattern = r'\ba\w*\b'    print(re.findall(pattern,str))2. 贪婪模式与懒惰模式    pattern1 = "p.*n"   # 贪婪模式      pattern2 = "p.*?n"  # 懒惰模式     ?指定前一个数量元字符匹配次数为1(*为0-1)    3. 模式修正符    符号 含义    I  匹配时忽略字母大小写    M  多行匹配    L  做本地化识别匹配    U  根据Unicode字符及解析字符    S  使元字符"."匹配包括换行在内的所有字符    X  使存在分行符的正则表达式,也能正确匹配(目的:让表达式逻辑更清晰)        re.findall('pattern1','str',re.I)4. RE中常用的方法(函数)    方法/属性  作用    re.match(pattern, string, flags=0) 从字符串的起始位置匹配,成功返回MatchObject 实例,失败就返回none    re.search(pattern, string, flags=0)     查找第一个成功的匹配,返回SearchObject 实例,失败就返回none    re.findall(pattern, string, flags=0)   找到RE匹配的所有字符串,并把他们作为一个列表返回    re.finditer(pattern, string, flags=0)  找到RE匹配的所有字符串,并把他们作为一个迭代器返回    re.sub(pattern, repl, string, count=0, flags=0)    替换匹配到的字符串    re.subn(pattern, repl, string, count=0, flags=0)   替换匹配到的字符串,并返回一个元组:(result,替换了几次)    re.split(pattern, string, maxsplit=0, flags=0) 根据正则,对源字符串进行切割    re.compile(pattern[, flags])        作用:把正则表达式语法转化成正则表达式对象,通过对象来调用函数     好处:      1.此函数是先编译为正则对象再来调用,因此在多次匹配时,可以减少编译次数      2.函数调用更简捷,不用再传pattern
    函数参数说明:    pattern:匹配的正则表达式。    string:要匹配的字符串。    flags:标记为,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。    repl:替换的字符串,也可作为一个函数。    count:模式匹配后替换的最大次数,默认0表示替换所有匹配。    maxsplit:最大切割次数        分组函数返回实例:    方法/属性  作用    group(num=0)   匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。    groups()   返回包含所有小组字符串的元组,从1到所含的小组    groupdict()    返回以有别名的组的别名为键、以该组截获的子串为值的字典    start()    返回匹配开始的位置    end()  返回匹配结束的位置    span() 返回一个元组包含匹配(开始,结束)的位置'''import redef re_object_test():    '''    类似的函数有:match()、search()…,返回值为一个对象    方法:    功能:    group()    返回 RE 匹配的字符串值    start()    返回 匹配开始的位置    end()  返回 匹配结束的位置    span() 以元组形式返回 匹配( 开始,结束 ) 的位置    '''    pattern = r"python."  # 设定以 "python" 为切割标识符    string = "ABCpython2DEFpython3GHIpython4567"    result = re.search(pattern, string)    print(result.group())  # 输出匹配的内容    print(result.span())  # 输出匹配的位置信息    print(result.start())  # 输出匹配内容的 起始位置    print(result.end())def sub_test():    '''    查找并替换    语法格式:    re.sub(pattern, repl, string, count=0, flags=0)    pattern:传入需要匹配的正则表达式。    repl:替换后的字符串    string:传入需要匹配的源字符串。    count:指定替换的个数    flags:标志位(可选参数),可传入“模式修正符”等信息。    '''    pattern = r"python."    string = "ABCpython2DEFpython3GHIpython4567"    result1 = re.sub(pattern, "java", string)  # 默认替换所有    result2 = re.sub(pattern, "java", string, 2)  # 替换 2 次    print(result1)    print(result2)def split_test():    '''    语法格式:    re.split(pattern, string, maxsplit=0, flags=0)    pattern:传入需要匹配的正则表达式。    string:传入需要匹配的源字符串。    maxsplit:指定最大的切割次数    flags:标志位(可选参数),可传入“模式修正符”等信息。    '''    pattern = r"python"  # 设定以 "python" 为切割标识符    string = "ABCpython2DEFpython3GHIpython4567"    result1 = re.split(pattern, string)  # 全局切割    result2 = re.split(pattern, string, 2)  # 只切割 2 次    print(result1)    print(result2)def search_test():    '''    re.search(pattern, string[, flags])    返回第一个查找到的    作用:在字符串中查找匹配正则表达式模式的位置,返回 MatchObject    的实例,如果没有找到匹配的位置,则返回 None。    '''    pattern = r"(?P<name>python)(?P<t>.)"    string = "ABCpython2DEFpython3GHIpython4567"    res = re.search(pattern,string)    print(res.group('t'))    print(res.group(1))    print(res.groupdict())    print(res.span())    passif __name__ == "__main__":    # sub_test()    # split_test()    # re_object_test()    search_test()
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!