• Python 正则介绍


    正则表达式是一种小型的,高度专业化的变成语言,在 Python 中,它通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的引擎执行。

    findall() 方法,所有匹配的结果都返回到一个列表里

    import re
    
    res = re.findall('klvchen', 'hello ,My name is klvchen. Are you ok?')
    print(res)
    运行结果:
    ['klvchen']
    

    原字符: . ^ $ * + ? { } [ ] | ( )
    . 只能代指任意一个字符

    import re
    
    res = re.findall('w..l', 'hello world')
    print(res)
    运行结果:
    ['worl']
    
    res = re.findall('w..l', 'hello w	 ld')
    print(res)
    运行结果:
    ['w	 l']             #  	 空格也是属于一个字符
    

    ^ 以后面一个字符开头

    import re
    
    res = re.findall('^h...o ', 'hello world')
    print(res)
    运行结果:
    ['hello']
    

    $ 以前面一个字符结尾

    import re
    
    res = re.findall('wo..d$', 'hello,world')
    print(res)
    运行结果:
    ['world']
    

    * 重复匹配前面一个字符 (0个或多个), 默认是贪婪匹配

    import re
    
    res = re.findall('ba*', 'urtslkfslabaaaa')
    print(res)
    运行结果:
    ['baaaa']
    
    res = re.findall('ba*?', 'urtslkfslabaaaa')  # 后面加 ? 号使其变成惰性匹配
    print(res)
    运行结果:
    ['b']
    
    

    + 重复匹配前面一个字符(1个或多个), 默认是贪婪匹配

    import re
    
    res = re.findall('a+b', 'urtslkfslabaaaa')
    print(res)
    运行结果:
    ['ab']
    

    ? 重复匹配前面一个字符(0个或1个)

    import re
    
    res = re.findall('a?b', 'urtblkfslabaaaa')
    print(res)
    运行结果:
    ['b', 'ab']
    

    {n, m} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式

    import re
    
    res = re.findall('a{3}', 'aaab')
    print(res)
    运行结果:
    ['aaa']
    
    res = re.findall('a{1,2}', 'aaab')
    print(res)
    运行结果:
    ['aa', 'a']
    

    [] 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k', 取消元字符的特殊功能

    import re
    
    res = re.findall('a[b,c]d', 'acd')
    print(res)
    运行结果:
    ['acd']
    
    res = re.findall('[a-zA-Z]', 'acd')
    print(res)
    运行结果:
    ['a', 'c', 'd']
    
    res = re.findall('[w,*]', 'klwdx*')
    print(res)
    运行结果:
    ['w', '*']
    
    res = re.findall('[w,,]', 'klwdx*,')
    print(res)
    运行结果:
    ['w', ',']
    
    res = re.findall('[1-9]', 'hsdl1dsfsf56')
    print(res)
    运行结果:
    ['1', '5', '6']
    
    res = re.findall('[1-9,a-z,A-Z]','12klvCHEN')
    print(res)
    运行结果:
    ['1', '2', 'k', 'l', 'v', 'C', 'H', 'E', 'N']
    

    ^ 在 [] 里,取反

    import re
    
    res = re.findall('[^1,2]','h1w 2')
    print(res)
    运行结果:
    ['h', 'w', ' ']
    

    () 代表着一个整体

    import re
    
    res = re.findall('www.(w+).com','www.baidu.com')   #返回()的内容
    print(res)
    运行结果:
    ['baidu']
    
    res = re.findall('www.(?:w+).com','www.baidu.com') #返回整体
    print(res)
    运行结果:
    ['www.baidu.com']
    
    模式 说明
    d 匹配任何十进制数,相当于 [0-9]
    D 匹配任何非十进制数,相当于 [ ^0-9 ]
    s 匹配任何空白字符,相当于 [ fv]
    S 匹配任何非空白字符,相当于 [ ^ fv ]
    w 匹配任何字母数字字符,相当于 [a-zA-Z0-9]
    W 匹配任何非字母数字字符,相当于 [ ^a-zA-Z0-9 ]
     匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
    import re
    
    res = re.findall('d{11}', 'abcd123456789098765')
    print(res)
    运行结果:
    ['12345678909']
    
    res = re.findall('sabc', 'hello abc')
    print(res)
    运行结果:
    [' abc']
    
    res = re.findall('w', 'he llo')
    print(res)
    运行结果:
    ['h', 'e', 'l', 'l', 'o']
    
    res = re.findall(r'I', 'hello,I am klvchen')
    print(res)
    运行结果:
    ['I']
    
    res = re.findall(r'\','abcde')
    print(res)
    运行结果:
    ['\']
    

    search 方法,返回匹配到的第一个对象(object), 需要调用group()返回结果

    import re
    
    res = re.search('kl', 'hello, my name is klvchen')
    print(res)
    print(res.group())
    运行结果:
    <_sre.SRE_Match object; span=(18, 20), match='kl'>
    kl
    
    res = re.search('a.', 'a.jpg').group()
    print(res)
    运行结果:
    a.
    
    res = re.search('(as)+','sdfsafasksas').group()         
    print(res)
    运行结果:
    as
    
    res = re.search('(as)|3','abas8as').group()
    print(res)
    运行结果:
    as
    
    res = re.search('(?P<id>d{4})','hello,12345678') #(?P<名字>正则)这是固定格式,然后可以通过名字调用
    print(res.group('id'))
    运行结果:
    1234
    
    res = re.search('(?P<id>d{4})/(?P<name>w{2})','hello,12345678/klvchen')
    print(res.group('id'))
    print(res.group('name'))
    运行结果:
    5678
    kl
    

    match() 方法,仅在字符串开始的地方匹配,返回匹配到的第一个对象(object), 需要调用group()返回结果

    import re
    
    res = re.match('abc','aabcdabc')
    print(res)
    运行结果:
    None
    
    res = re.match('abc','abcdabc')
    print(res.group())
    运行结果:
    abc
    

    split() 方法

    import re
    res = re.split('[b,f]','abcdefghij')     # 先切割 b ,再对剩下的字符串以 f 进行切割
    print(res)
    运行结果:
    ['a', 'cde', 'ghij']
    

    sub() 方法

    import re
    res = re.sub('k.v','abc','klvchen')
    print(res)
    运行结果:
    abcchen
    
    res = re.sub('d','8','k1v2chen',1)   # 只替换一次
    print(res)
    运行结果:
    k8v2chen
    

    compile() 方法

    obj = re.compile('.com')
    res = obj.findall('ab.comdefg')
    print(res)
    运行结果:
    ['.com']
    

    finditer() 方法

    res = re.finditer('d', 'ab3cd4gh5jk')
    print(res)
    print(next(res).group())
    print(next(res).group())
    运行结果:
    <callable_iterator object at 0x0000013DFF84CD30>
    3
    4
    
  • 相关阅读:
    Google 推出开源博客迁移工具
    Google 的盲人科学家 T. V. RAMAN
    Sun收购Qlayer以积极推动云计算业务
    比尔盖茨:云计算再造软件边界
    一些CodeGuru的COM教程 (英文)
    机器人:人工智能与心理学的较量
    100个最古老互联网域名 最久只有23年(附名单)
    spring2 hibernate3 中包冲突问题解决
    spring2.5+struts2+hibernate+mysql
    [转].NET破解体验 ildasm.exe的使用
  • 原文地址:https://www.cnblogs.com/klvchen/p/8889298.html
Copyright © 2020-2023  润新知