美文网首页
RE模块字符串操作

RE模块字符串操作

作者: 罗泽坤 | 来源:发表于2020-01-15 22:27 被阅读0次

    RE模块字符串操作

    • 使用match方法从开始处匹配字符串,if sucess return Match objection else return None

    re.match(pattern,string,flags)

    • 使用search方法在整个字符串中匹配子字符串,if sucess return Match objection else return None

    re.search(pattern,string,flags)

    • 使用findall方法匹配所有符合expression的字符串,if succss return Match-list else return None-list

    re.findall(pattern,string,flags)

    参数说明

    1.pattern:匹配模板

    2.string:匹配字符串

    3.flags:可选参数,用于控制匹配方式,如是否区分大小写

    • 使用sub方法替换字符串

    re.sub(pattern,repl,string,count,flag)

    参数说明

    1.pattern:匹配模板

    2.repl:表示替换成的字符串

    3.string:表示被替换的字符串

    3.count:表示替换最大次数

    • 使用split方法分割字符串

    re.split(pattern,string,[maxsplit],[flags])

    参数说明

    1.string:分割字符串

    2.maxplit:最大分割次数

    import re
    pattern = r'mr_\w+'
    string = 'MR_one mr_two'
    match = re.match(pattern,string,re.I)
    print(match)
    print(match.string)   #提取要匹配的字符串
    print(match.start())    #匹配起始位置
    print(match.end())      #匹配结尾位置
    print(match.span())     #匹配起始结尾位置元组
    print(match.group())   #匹配的数据
    
    <_sre.SRE_Match object; span=(0, 6), match='MR_one'>
    MR_one mr_two
    0
    6
    (0, 6)
    MR_one
    
    string = '321  Mr_luo'
    search = re.search(pattern,string,re.I)
    print(search.string)
    print(search.group())
    
    321  Mr_luo
    Mr_luo
    
    string = 'dsadsa 123 dsad 123 dsa 123 dsa 123'
    pattern = '[0-9]{1,3}'
    findall = re.findall(pattern,string)
    print(findall)
    
    ['123', '123', '123', '123']
    
    pattern = '[0-9]{1,3}'
    repl = 'SSS'
    print('替换之前:',string)
    sub = re.sub(pattern,repl,string)
    print('替换之后:',sub)
    
    替换之前: dsadsa 123 dsad 123 dsa 123 dsa 123
    替换之后: dsadsa SSS dsad SSS dsa SSS dsa SSS
    
    print('分割之前:',sub)
    pattern = '[a|s]'
    split = re.split(pattern,sub,0,re.I)
    print('分割之后:',split)
    
    分割之前: dsadsa SSS dsad SSS dsa SSS dsa SSS
    分割之后: ['d', '', 'd', '', ' ', '', '', ' d', '', 'd ', '', '', ' d', '', ' ', '', '', ' d', '', ' ', '', '', '']
    
    # 匹配IP地址
    import re
    pattern1 = r'[1-9]{1,3}(\.[0-9]{1,3}){3}'
    pattern2 = r'[1-9]{1,3}(\.[0-9]{1,3}){2}'
    pattern3 = r'([1-9]{1,3}(\.[0-9]{1,3}){2})'
    pattern4 = r'([1-9]{1,3}(\.[0-9]{1,3}){3})'
    
    string = '193.168.1.1 192.168.1.66'
    findall1 = re.findall(pattern1,string)
    print(findall1)
    findall2 = re.findall(pattern2,string)
    print(findall2)
    findall3 = re.findall(pattern3,string)
    print(findall3)
    findall4 = re.findall(pattern4,string)
    print(findall4)
    
    ['.1', '.66']
    ['.1', '.1']
    [('193.168.1', '.1'), ('192.168.1', '.1')]
    [('193.168.1.1', '.1'), ('192.168.1.66', '.66')]
    
    for item in findall4:
        print(item[0])
    
    193.168.1.1
    192.168.1.66
    

    由上面的例子可以看到当分组里面套了分组的时候程序是如何运行的
    pattern3 = r'([1-9]{1,3}(.[0-9]{1,3}){2})'
    pattern4 = r'([1-9]{1,3}(.[0-9]{1,3}){3})'
    如这两个表达式在匹配的时候先忽略内层括号,考虑最外面一层()进行匹配,然后在匹配内层括号内的,然后把内层与外层的匹配值合并成一组
    (.[0-9]{1,3}){2})
    (.[0-9]{1,3}){3})
    这两个表达式的意思是重复匹配表达式(.[0-9]{1,3}),2、3次且取最后一次匹配值

    相关文章

      网友评论

          本文标题:RE模块字符串操作

          本文链接:https://www.haomeiwen.com/subject/bgexzctx.html