zoukankan      html  css  js  c++  java
  • re模块

    re模块

    从字符串里找到特定的字符

    re的基本语法(匹配规则)

    import re
    
    s = '王大炮打炮被大炮打死了 王大炮打炮被大炮打死了'
    #    0 1 2 3 4 5 6 7 8 9 10
    # print(s[1:3], s[6:8])
    # res = re.findall('大.',s)
    # print(res)
    # ^: 开头
    print(re.findall('^王大炮', s))
    # $: 结尾
    print(re.findall('死了$', s))
    # []: 匹配中间的字符,只要单个字符
    s = 'acefghjkacefsdfsdf'
    print(re.findall('[acef]', s))  # 只要单个字符
    # []+^联用: ^对[]内的元素取反
    print(re.findall('[^acef]', s))
    # .: 任意字符(除了
    )
    s = 'abacadaeaf'
    print(re.findall('a..', s))
    

    ['王大炮']
    ['死了']
    ['a', 'c', 'e', 'f', 'a', 'c', 'e', 'f', 'f', 'f']
    ['g', 'h', 'j', 'k', 's', 'd', 's', 'd']
    ['aba', 'ada']

    s = 'abaacaaaaa'
    # *: 前面的字符0-无穷个
    print(re.findall('a*', s))
    # +: 前面的字符1-无穷个
    print(re.findall('a+', s))
    # ?: 前面的字符0-1个
    print(re.findall('a?', s))
    # {m}: 前面的字符m个
    print(re.findall('a{5}', s))
    # {n,m}: 前面的字符2-3个  # 'abaacaaaaa'
    #                            a aa aaa aa
    print(re.findall('a{2,5}', s))
    
    

    ['a', '', 'aa', '', 'aaaaa', '']
    ['a', 'aa', 'aaaaa']
    ['a', '', 'a', 'a', '', 'a', 'a', 'a', 'a', 'a', '']
    ['aaaaa']
    ['aa', 'aaaaa']

    # d: 数字
    s = 's  1   s+
    =$	2_s  3'
    print(re.findall('d', s))
    # D: 非数字
    print(re.findall('D', s))
    # w: 数字/字母/下划线
    print(re.findall('w', s))
    # W: 非数字/字母/下划线
    print(re.findall('W', s))
    # s: 空格/	/
    
    print(re.findall('s', s))
    # S: 非空格/	/
    
    print(re.findall('S', s))
    ```
    ['1', '2', '3']
    ['s', ' ', ' ', ' ', ' ', ' ', 's', '+', '
    ', '=', '$', '	', '_', 's', ' ', ' ']
    ['s', '1', 's', '2', '_', 's', '3']
    [' ', ' ', ' ', ' ', ' ', '+', '
    ', '=', '$', '	', ' ', ' ']
    [' ', ' ', ' ', ' ', ' ', '
    ', '	', ' ', ' ']
    ['s', '1', 's', '+', '=', '$', '2', '_', 's', '3']
    
    ```
    
    # : 取消意义
    s = 'abad'
    print(re.findall(r'a\d', s))
    
    # .*: 贪婪模式(最大化),找到继续找,让结果最大化
    s = 'abbbcabc'
    print(re.findall('a.*c', s))
    
    # .*?: 非贪婪模式(最小化),找到就马上停止
    print(re.findall('a.*?c', s))
    
    # (): 只要括号内的
    s = 'abacad'
    print(re.findall('a(.)', s))
    
    # A|B: A和B都要
    s = 'abacad'
    print(re.findall('a|b', s))
    
    
    

    ['ad']
    ['abbbcabc']
    ['abbbc', 'abc']
    ['b', 'c', 'd']
    ['a', 'b', 'a', 'a']

    re模块的方法

    re.compile

    修饰符 描述
    re.I 使匹配对大小写不敏感
    re.L 做本地化识别(locale-aware)匹配
    re.M 多行匹配,影响 ^ 和 $
    re.S 使 . 匹配包括换行在内的所有字符
    re.U 根据Unicode字符集解析字符。这个标志影响 w, W, , B.
    re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

    import re
    s = 'abc123
    def456'
    # print(re.findall('d+',s))
    # com = re.compile('d+')
    par = 'd+'
    # com = re.compile('3.',re.S)
    # print(re.findall(com, s))
    print(re.findall('3.', s, re.S))
    
    s = '123abc123
    def456'
    print(re.findall('d+', s))
    

    ['3 ']
    ['123', '123', '456']

    import re
    s = '123abc123
    def456'
    # re.mathch(): 从开头搜索,搜索到了就有,没搜索到就是none
    res = re.match('d+', s)
    print(res)
    print(res.group())
    
    # re.search(): 搜索第一个匹配结果,找到了就不找了
    res = re.search('d+', s)
    print(res)
    print(res.group())
    
    

    <_sre.SRE_Match object; span=(0, 3), match='123'>
    123
    <_sre.SRE_Match object; span=(0, 3), match='123'>
    123

    # re.split(): 按照匹配规则切割
    import re
    s1 = 'abc324asdfk234lkjsf324lkj'
    print(re.split('d+', s1))
    
    # re.sub(): 按照匹配规则替换(**********)
    print(re.sub('d+', '***', s1))
    
    # re.subn(): 按照匹配规则替换,并计数
    print(re.subn('d+', '***', s1))
    
    # 分组: 一个括号里的叫一个分组, django, 了解
    s = 'abc123edf456'
    res = re.search('abc(?P<abc>d+)edf(?P<edf>d+)', s)
    print(res.groupdict())
    
    
    ['abc', 'asdfk', 'lkjsf', 'lkj']
    abc***asdfk***lkjsf***lkj
    ('abc***asdfk***lkjsf***lkj', 3)
    {'abc': '123', 'edf': '456'}
    
    
  • 相关阅读:
    sql优化
    什么是泛型
    Http Status 400
    Hadoop搭建伪分布式 & 上传和下载文件
    Centos64 安装指南
    个人感悟
    zabbix4.0部署
    MySQL引擎
    mysql正则表达式
    k8s自动补全命令
  • 原文地址:https://www.cnblogs.com/aden668/p/11384237.html
Copyright © 2011-2022 走看看