Python3正则表达式——小白初学!最完整的教程没有之一( 二 )

  • re.ASCII 简写 re.A作用:让\w,\b,\d…只匹配ASCII , 而不是Unicode
  • re.DOTALL 简写 re.S作用:匹配所有 , 包括\n
  • re.MULTILINE 简写 re.M作用:多行模式 , 当某字符串中有换行符\n , 默认模式下是不 支持换行符特性的 , 比如:行开头 和 行结尾 , 而多行模式下是支持匹配行开头的
  • re.VERBOSE 简写 re.X作用:在正则表达式中加注解简单给出一个例子更多详细可以参考python正则表达式中re模块常量用法简介
  • re模块中常用函数1.字符串匹配re模块提供了正则表达式操作所需要的功能
    1.1match( )re.match(pattern,string[,flags])
    从首字母开始开始匹配 , string如果包含pattern子串 , 则匹配成功 , 返回Match对象;失败则返回None
    代码如下(示例):
    import reprint(re.match(r'How','How are you'))1运行结果
    1.2search( )re.search(pattern,string[,flags])
    将字符串的所有子串尝试与正则表达式匹配 , 如果所有的字串都没有匹配成功 , 返回none , 否则返回Match对象 。 注意:多个子串 , 只返回第一个
    代码如下(示例):
    s1='ahello's2='bahello world hello'print(re.match(s1,s2))print(re.search(s1,s2))123运行结果
    None11.3 findall( )re.findall(pattern,string[,flags])
    列表的形式返回所有能匹配的子串 , 如果没有找到匹配的 , 则返回空列表 。
    代码如下(示例):
    s3=r'abc'print(re.findall(s3,'aabaab'))print(re.findall(s3,'aabcaabc'))12运行结果
    []['abc', 'abc']11.4 finditer( )re.finditer(pattern, string[, flags])
    返回string中所有与pattern相匹配的全部字串 , 返回形式为Match对象的迭代器 。
    1.5小结1.我们会发现对于findall()函数返回的是一个列表 , 而match()和search()函数 , 直接打印输出的结果很多 。 因此匹配对象的方法只适用于match , search , findier , 而不适合findall 。 2.例如它就是函数返回的match对象,但是我们想要得到的只是最后一个结果match=‘abcde’ , 接下来我们会学习匹配对象的方法来解决这个问题
    1.6目标串返回在正则表达式中使用()用来分组 。 group()用来提出分组截获的字符串 。
    group() 同group(0)就是匹配正则表达式整体结果;group(1) 返回第1个括号匹配部分;group(2) 列出第2个括号匹配部分;group(3) 列出第3个括号匹配部分;…
    代码如下(示例):
    a="123abc456"print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group())print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0))print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1))print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2))print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3))12345运行结果
    123abc456123abc456123abc45612342.字符串替换——re.subre.sub(pattern, repl, string[, count])
    使用repl替换string中每一个匹配的子串后返回替换后的字符串 。 当repl是一个字符串时 , 可以使用\id或\g、\g引用分组 , 但不能使用编号0;当repl是一个方法时 , 这个方法应当只接受一个参数(Match对象) , 并返回一个字符串用于替换(返回的字符串中不能再引用分组) 。 count用于指定最多替换次数 , 默认全部替换 。
    代码如下(示例):
    s1="she is a girl. she likes apples"result = re.sub('she','he',s1,1)print(result)12运行结果
    he is a girl. she likes apples3.字符串拆分——re.split()re.split(pattern,string,maxsplit)
    【Python3正则表达式——小白初学!最完整的教程没有之一】maxsplit指定最大分割次数 , 不指定将全部分割 。 返回根据匹配到的子串将字符串分割成列表
    代码如下(示例):
    result = re.split('\d+','a111b222c33')print (result)1db = '2020-10-121 23:23:23'result = re.split("\W+",db)print (result)12运行结果
    ['a', 'b', 'c', '']['2020', '10', '121', '23', '23', '23']正则表达式对象1.compile()函数compile(pattern,[,flags]
    compile()函数 编译正则表达式(以字符串书写的)pattern , 转换为模式对象然后返回一个正则表达式对象 。 不同于re.method()这种模式 , 使用预编译的代码对象比直接使用字符串要快 , 因为解释器在执行字符串形式的代码前都必须把字符串编译成代码对象 。
    用正则表达式对象获取匹配子串
    2.字符串匹配Pattern.match(string[, pos[, endpos]])Pattern.search(string[, pos[, endpos]])Pattern.findall(string[, pos[, endpos]])