Python正则表达式库re的实用指南

目录:

一.re库简介

二.match方法

三.Match对象方法

四.使用search()方法进行匹配

五.使用findall()方法进行匹配

六.使用sub()方法替换字符串

七.使用split()方法分割字符串


一.re库简介

re库是Python用来实现“正则表达式”的库,并且re库在Python中内置,无需使用pip安装

re库提供了:“match”、“search”、“findall”三种基本搜索模式,以及“sub”一种替换模式,“split”一种分割模式

二.match方法

match()方法从“字符串的开始处”进行匹配,如果在起始位置匹配成功,返回Match对象,否则返回None

语法格式如下:

re.match(pattern,string,flags)

参数说明:

  • pattern:表示模式字符串,由正则表达式转换而来
  • string:表示要匹配的字符串
  • flags:可选参数,控制匹配方式,如:是否区分字母大小写、是否包括换行等等
  •  所有标志位如下:

    标志 说明
    re.A或re.ASCII 对于\w、\W、\b、\B等特殊转义字符进行ASCII匹配
    re.I或re.IGNORECASE 不进行大小写匹配
    re.M或re.MULTILINE` 将^和$用于包括整个字符串的开始和结尾的每一行
    re.S或re.DOTALL 使用(.)字符匹配所有字符
    re.X或re.VERBOSE 忽略模式字符串(pattern)中未转义的空格和注释

    我们先来看一下match的使用:

    在上面的例子中,没有匹配到任何结果,是因为match从字符串的第一个字符开始匹配,如果第一个字符就不符合就会结束匹配并返回None,而我们不指定“re.I”时,默认是进行大小写匹配

    如果我们使用“re.I”结果如下:

    可以看到,匹配到了字符串“JuJingYi

    三.Match对象方法

    在上使用match匹配时,返回的match对象具有多种方法供我们使用:

  • start():返回结果字符串的起始位置
  • end():返回结果字符串的终止位置,end()为结果字符串中最后一个字符的下标索引+1
  • string属性:返回match对象的匹配字符串,在上面的例子中是“JuJingYi is a beauty
  • span():返回匹配位置的元组,即“(start(),end())
  • group():返回结果字符串,在上面的例子中是“JuJingYi
  • 下面我们针对上面的例子,看一下运行效果吧:

    import re
    string = "JuJingYi is a beauty"
    pattern = r"ju\w+"
    match = re.match(pattern,string,re.I)
    print("结果字符串的开始位置是:",match.start())
    print("结果字符串的结束位置是:",match.end())
    print("要匹配的字符串是:",match.string)
    print("结果字符串的位置元组是:",match.span())
    print("结果字符串是:",match.group())

    效果:

    四.使用search()方法进行匹配

    search()方法用于在整个字符串中搜索第一个匹配的值,如果匹配成功,返回Match对象,否则返回None

    语法如下:

    re.search(pattern,string,flags)

    参数说明:

  • pattern:表示模式字符串,由正则表达式转换而来
  • string:表示要匹配的字符串
  • flags:可选参数,控制匹配方式,如:是否区分字母大小写、是否包括换行等等
  •  注意:search方法虽然在整个字符串中搜索,但是只返回第一个结果,如果有多个子字符串符合,那么只返回第一个

    下面是一个例子:

    import re
    string = "JuJingYi JuJingYi"
    pattern = r"ju\w+"
    match = re.match(pattern,string,re.I)
    print("结果字符串的开始位置是:",match.start())
    print("结果字符串的结束位置是:",match.end())
    print("要匹配的字符串是:",match.string)
    print("结果字符串的位置元组是:",match.span())
    print("结果字符串是:",match.group())

    结果:

    五.使用findall()方法进行匹配

    findall()方法在“整个字符串”中搜索“所有符合”匹配模式的字符串,并以“列表”的形式返回结果,如果没有匹配到结果,则返回空列表

    语法如下:

    re.findall(pattern,string,flags)

    参数说明:

  • pattern:表示模式字符串,由正则表达式转换而来
  • string:表示要匹配的字符串
  • flags:可选参数,控制匹配方式,如:是否区分字母大小写、是否包括换行等等
  •  下面是一个例子:

    import re
    string = "JuJingYi JuJingYi"
    pattern = r"ju\w+"
    match = re.findall(pattern,string,re.I)
    print("结果字符串是:",match)

    结果:

    值得注意的是:findall()方法返回的是一个列表,不是一个Match对象,自然没有“start()、end()、string、span()、group()”方法了

    六.使用sub()方法替换字符串

    sub()方法用于实现字符串替换,并且返回一个“替换后”的字符串

    语法格式如下:

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

    参数说明:

  • pattern:模式字符串
  • repl要替换的字符串
  • string:原始字符串
  • count:可选参数,表示替换次数,默认值为0表示全部替换
  • flags:可选参数,用于控制匹配模式
  •  下面是一个例子:

    import re
    string = "JuJingYi JuJingYi"
    pattern = r"ju\w+"
    repl = "Beauty"
    match = re.sub(pattern,repl,string,0,re.I)
    print("替换前的字符串是:",string)
    print("替换后的字符串是:",match)

    结果:

    七.使用split()方法分割字符串

    re.split()方法根据“匹配模式”实现分割字符串,跟字符串中的“split”是不一样的

    结果以列表的形式返回,如果没有匹配到会返回“原字符串”(在列表中)

    语法如下:

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

    参数说明:

  • pattern:模式字符串
  • string:原始字符串
  • maxsplit:最大分割次数
  • flags:可选参数,用于控制匹配模式
  •  一个例子如下:

    import re
    string = "姓名-张三,学历-硕士,性别-男"
    pattern = r"-|,"
    match = re.split(pattern,string,flags=re.I)
    print("结果是:",match)

    结果:

    而如果没有匹配到,会返回一个只有“原字符串”一个元素的列表:

    import re
    string = "姓名-张三,学历-硕士,性别-男"
    pattern = r"###"
    match = re.split(pattern,string,flags=re.I)
    print("结果是:",match)

    结果:

    作者:是洋洋a

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python正则表达式库re的实用指南

    发表回复