zoukankan      html  css  js  c++  java
  • re库的使用

    一、re库的调用

    import re

    二、正则表达式类型

    • raw string类型(原生字符串类型,即不包括转义符类型):r'text'
    • string类型,更繁琐。

    三、Re库主要功能函数

      函数              说明

    re.search()        在一个字符串中搜索匹配正则表达式的第一个位置,然后返回match对象

    re.match()         从第一个字符串的开始位置起匹配正则表达式,返回match对象

    re.findall()         搜索字符串,以列表类型返回全部能匹配的子串

    re.split()         将一个字符串按照正则表达式匹配结果进行分割,返回列表类型

    re.finditer()         搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象

    re.sub()         在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

    ①re.search(pattern,string,flags=0)

    • pattern:正则表达式的字符串或原生字符串表示
    • string:待匹配的字符串
    • flags:正则表达式使用时的控制标记

      fiags常用标记:

    1. re.I   re.IGNORECASE                   忽略正则表达式的大小写,[A-Z]能够匹配小写字符
    2. re.M re.MULTILINE                   正则表达式中的^操作符能够将给定字符串的每行当做匹配开始
    3. re.S re,DOTALL                            正则表达式中的.操作符n能够匹配所有字符,默认匹配除换行外的所有字符
    1 import re
    2 
    3 match = re.search(r'[1-9]d{5}','BIT 100081')
    4 if match:
    5     print(match.group(0))


    >>>100081

    ②re.macth(pattern,string,flags=0)

    • pattern:正则表达式的字符串或原生字符串表示
    • string:待匹配的字符串
    • flags:正则表达式使用时的控制标记
    1 import re
    2 match = re.match(r'[1-9]d{5}','100081 200012 BIT')
    3 if match:
    4     print(match.group(0))

    >>>100081

    ③re,findall(pattern,string,flags=0)

    • pattern:正则表达式的字符串或原生字符串表示
    • string:待匹配的字符串
    • flags:正则表达式使用时的控制标记
    1 import re
    2 
    3 match = re.findall(r'[1-9]d{5}','BIT100081 ICD100085')
    4 print(match)

    >>>['100081', '100085'

    ④re.split(pattern,string,maxsplit=0,flags=0)

    • pattern:正则表达式的字符串或原生字符串表示
    • string:待匹配的字符串
    • maxsplit:最大分割数,剩余部分作为最后一个元素输出
    • flags:正则表达式使用时的控制标记
    1 import re
    2 
    3 macth = re.split(r'[1-9]d{5}','BIT100081 ICD100085')
    4 print(macth)
    5 
    6 macths = re.split(r'[1-9]d{5}','BIT100084 ICD100085' ,maxsplit=1)
    7 print(macths)

    >>>['BIT', ' ICD', '']
    >>>['BIT', ' ICD100085']

    ⑤re.finditer(pattern,string,flags=0)

    • pattern:正则表达式的字符串或原生字符串表示
    • string:待匹配的字符串
    • flags:正则表达式使用时的控制标记
    1 import re
    2 
    3 macth = re.finditer(r'[1-9]d{5}','BIT100084 ICD100085')
    4 for i in macth:
    5     if i :
    6         print(i.group(0))

    >>>100084
      10008

    ⑥re.sub(pattern, repl, string, count=0, flags=0)

    • pattern:正则表达式的字符串或原生字符串表示
    • repl:替换字符串的字符串
    • string:待匹配的字符串
    • count:替换的次数
    • flags:正则表达式使用时的控制标记
    1 import re
    2 
    3 macth = re.sub(r'[1-9]d{5}','110021','BIT100084 ICD100085')
    4 print(macth)
    5 
    6 macths = re.sub(r'[1-9]d{5}','110021','BIT100084 ICD100085',count=1)
    7 print(macths)

    >>>BIT110021 ICD110021
    >>>BIT110021 ICD10008

    四、正则表达式的另外一种等价用法

    使用re.compile()方法将正则表达式编译成正则表达式对象,正则表达式的六个方法都能使用

    r = re.compile(pattern,flags=0)

    • pattern:正则表达式的字符串或原生字符串表示
    • flags:正则表达式使用时的控制标记
     1 import re
     2 
     3 res = re.compile(r'[1-9]d{5}')
     4 macth = re.search(res,'BIT100084 ICD100085')
     5 if macth:
     6     print(macth.group(0))
     7 
     8 f = re.match(res,'100084BIT 100085IDC')
     9 if f:
    10     print(f.group(0))
    11 
    12 d = re.findall(res,'100084BIT 100085IDC')
    13 print(d)

    >>>100084
    >>>100084
    >>>['100084', '100085'

     五、Re库的Match对象

    1、match对象的属性

    .string        待匹配的文本

    .re           匹配时使用的pattern对象(正则表达式)

    .pos           正则表达式搜索文本的开始位置

    .endpos       正则表达式搜索文本的结束位置

    2、match对象的方法

    .group(0)      获得匹配后的字符串

    .start()        匹配字符串在原始字符串的开始位置

    .end()         匹配字符串在字符串的结束位置

    .span()       返回(.start(),end.())

    六、贪婪匹配

    Re库默认采用贪婪匹配,即输出匹配最长的字符串

    1 import re
    2 
    3 f = re.search(r'PY.*?N','PYDASCEDNDFCSNWESASNDE')
    4 print(f.group(0))

    >>>PYDASCED

    输入最小匹配字符串

    import re
    
    f = re.search(r'PY.*?N','PYDASCEDNDFCSNWESASNDE')
    print(f.group(0))

    >>>PYDASCED

    最小匹配操作符

    *?        前一个字符0次或者无数次扩展,最小匹配

    +?          前一个字符1次或者无数次扩展,最小匹配

    ??        前一个字符0次或1次扩展,最小匹配

    {m,n}?      扩展前一个字符m至n次(含n),最小匹配

  • 相关阅读:
    DDD 领域驱动设计
    IOC 控制反转
    WCF
    Lucene 全文检索引擎
    Redis
    Cache 缓存
    return
    PHP中empty();和isset();的区别.
    sql 简单用语
    关系型数据库
  • 原文地址:https://www.cnblogs.com/zihkj/p/12274226.html
Copyright © 2011-2022 走看看