美文网首页
正则表达式

正则表达式

作者: 小橙子_43db | 来源:发表于2019-12-24 20:28 被阅读0次

    本文主要内容:

    正则表达式的概念,

    语法,

    常用正则表达式和python中的re库

    正则表达式是用来简洁表达一组字符串的表达式,正则表达式是一种通用的字符串表达框架,正则表达式是具有某一类特征的一组字符串

    'PY'

    'PYY'                 ------>正则表达式:PY+

    'PYYY...'

    在文本处理中的应用:

    >查找或替换一组字符串

    >匹配字符串的部分或全部

    正则表达式的语法

    正则表达式由字符和操作符构成

    操作符

    常用的正则表达式匹配:

    ^[A-Za-z]+$ :由26个字母组成的字符串

    ^[A-Za-z0-9]+$ :由26个字母和数字组成的字符串

    ^-?\d+$ :整数形式的字符串

    ^[0-9]*[1-9]*[0-9]*$ :正整数形式的字符串

    ^[1-9]\d{5}$:中国境内邮政编码

    [\u4e00-\u9fa5]:匹配中文字符

    \d{3}-\d{8}:匹配国内电话号码010-68697314

    python中Re库

    Re库是Python中的标准库,主要用于字符串匹配。

    调用:import re

    raw string类型:原生字符串类型,不包含对转移字符串再次转移的字符串

    例如:r'[1-9]\d{5}'  ---->    操作符\d的斜杠为转义字符,不用原生字符串类型应该表示为\\d

    re.search(pattern,string,flag=0):在字符串中搜索匹配正则表达式的第一个位置

    pattern:正则表达式的字符串或原生字符串表示

    string:待匹配字符串

    flag:正则表达式使用时的控制标记

    import re

    match = re.search(r'[1-9]\d{5}','BOSTCODE 432808,BOSTCODE 432800')

    if match:    #加判断防止未匹配到字符串时引用match报错

        print(match.group(0)) 

    #返回的Match对象,用group(0)获取匹配结果,另外Match中还有多个属性,后面介绍

    输出:432808

    re.match(pattern,string,flag=0):从字符串的开始位置匹配,返回Match对象,参数同search()函数

    match = re.match(r'[1-9]\d{5}','432808BOSTCODE ,BOSTCODE 432800')

    if match:

        print(match.group(0))

    输出:432808

    re.findall(pattern,string,flag=0):搜索字符串返回所有能匹配的字符串,返回list,参数同search()函数

    match = re.findall(r'[1-9]\d{5}','432808BOSTCODE ,BOSTCODE 432800')

    if match:

        print(match)

    输出:['432808', '432800']

    re.split(pattern,string,maxsplit=0,flag=0):搜索字符串返回所有能匹配的字符串,返回list,比search()函数多一个参数

    maxsplit:最大分割数,剩余部分作为最后一个字符串

    match = re.split(r'[1-9]\d{5}','BOSTCODE_ONE:432808 ,BOSTCODE_TWO:432800')

    match2 = re.split(r'[1-9]\d{5}','BOSTCODE_ONE:432808 ,BOSTCODE_TWO:432800',maxsplit=1)

    if match and match2:

        print(match)

        print(match2)

    输出:['BOSTCODE_ONE:', ' ,BOSTCODE_TWO:', '']

    ['BOSTCODE_ONE:', ' ,BOSTCODE_TWO:432800']

    re.finditer(pattern,string,flag=0):搜索字符串返回匹配结果的迭代类型,每一个元素是一个Match对象,

    match = re.finditer(r'[1-9]\d{5}','BOSTCODE_ONE:432808 ,BOSTCODE_TWO:432800')

    print(type(match))

    for mat in match:

        if mat:

            print(type(mat),mat.group(0))

    输出:

    <class 'callable_iterator'>

    <class 're.Match'> 432808

    <class 're.Match'> 432800

    re.sub(pattern,repl,string,count=0,flag=0):搜索字符串返回匹配结果的迭代类型,每一个元素是一个Match对象,比search()函数多了两个参数

    repl:替换匹配的字符串

    count:匹配字符串的最大替换次数

    str = 'BOSTCODE_ONE:432808 ,BOSTCODE_TWO:432800'

    match = re.sub(r'[1-9]\d{5}','12306',str,count=1) 

    match

    输出:'BOSTCODE_ONE:12306 ,BOSTCODE_TWO:432800'

    Re库的等价用法:

    上面的用法为函数式用法:一次性操作,每次调用函数系统内部会将正则表达式字符串编译成正则表达式对象

    等价用法为面向对象法:先编译正则表达式,然后用正则表达式对象来调用函数,可以多次使用,当匹配规则在多个地方使用先编译可以提高程序性能

    str = 'BOSTCODE_ONE:432808 ,BOSTCODE_TWO:432800'

    regex = re.compile(r'[1-9]\d{5}')

    match = regex.sub('12306',str,count=1)

    match

    输出:'BOSTCODE_ONE:12306 ,BOSTCODE_TWO:432800'

    Re的Match对象

    Match对象是一次匹配的结果,包含很多匹配信息

    Match对象的属性

    Match对象的方法

    匹配模式

    贪婪匹配:同时匹配长短不同的多项,返回长度最长的,Python默认采用这种模式

    mat = re.search(r'PY.*N','PYANBNCNDN')

    mat.group(0)

    输出:'PYANBNCNDN'

    最小匹配:在相应的操作符后面加?变为最小匹配模式

    mat = re.search(r'PY.*?N','PYANBNCNDN')

    mat.group(0)

    输出:'PYAN'

    常用的最小匹配操作符

    相关文章

      网友评论

          本文标题:正则表达式

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