正则表达式的简明概要

1. 正则表达式的简介

1.1 正则表达式的概念

  • 正则表达式并不是Python的一部分,正则表达式是用来处理字符串的强大工具,拥有自己独特的语法以及一个独立的搜索引擎,效率上可能不如str自带的方法,但是功能十分强大

1.2 正则表达式的匹配过程

  • 依次拿出表达式和文本中的字符比较,如果每一字符都能匹配,则匹配成功。一旦有匹配不成功的字符,则匹配失败。如果表达式中有量词或边界,这个过程会稍微有些不同。

1.3 正则表达式的应用场景

  • 表单验证(例如身份证、手机号、邮箱等等)
  • 爬虫

2. 正则表达式对Python的支持

2.1 普通字符

  • 字母、数字、下划线以及没有特殊定义的符号,都是 “ 普通字符 ”
  • 正则表达式中的普通字符,在匹配的时候只匹配与自身想同的一个字符

2.2 元字符

正则表达式的简明概要
一些无法书写或者具有特殊功能的字符,采用在前面加斜杠""进行转义的方法。
例如下表所示
正则表达式的简明概要

2.3 预定义匹配字符集
正则表达式的某些方法,可以同时匹配预定义字符集中的任意一个字符。比如:表达式 \d 可以匹配任意的一个数字。虽然能够匹配其中的字符,但是也只能够匹配一个,不会匹配多个
正则表达式的简明概要
2.4 重复匹配
以上的表达式无论是匹配一种字符的样式,还是匹配多种字符其中任意一个表达式,都只能够匹配一次。但是 我们需要重复匹配的时候,例如:3666666这种情况,写成 \d \d \d \d \d \d 这样太麻烦。所以我们可以使用重复匹配的表达式
正则表达式的简明概要
正则表达式的简明概要

2.5 位置匹配和非贪婪匹配

非贪婪匹配

  • 正则表达式通常用于在文本中查找匹配的字符串。Python里面的数量词默认是贪婪的(只在少数语言里面是非贪婪的),总是尝试匹配尽可能多的字符。非贪婪匹配则正好相反,它是尽可能匹配少的字符

  • 检验数字的相关表达式
    正则表达式的简明概要
    位置匹配

  • 对匹配的位置有特殊的要求,比如开头、结尾、单词之间等
    正则表达式的简明概要
    特殊场景表达式
    正则表达式的简明概要

3.re 模块常用方法

match()函数

  • match(pattern,string,flags = 0)
  • 第一个参数是正则表达式,如果匹配成功,则返回一个match对象,否则返回一个None
  • 第二个参数是要匹配的 字符串
  • 第三个参数是标志位用于控制正则表达式的 匹配方式。如是否区分大小写,多行匹配 等
    正则表达式的简明概要
    complie(pattern,flags = 0)
    compile 是re 模块的工厂方法用于将字符串形式的正则表达式编译为 pattern 对象,可以实现更加效率的匹配。第二个参数flags 是匹配模式,使用compile() 完成一次转化后,再次使用该匹配模式的时候就不能转换了。 经过compile()转换的正则表达式对象也能只用普通的 re 模块

flag 匹配模式正则表达式的简明概要
search(pattern,string,flags = 0)
在文本内查找,返回第一个匹配到的字符串。它的返回值类型和使用方法与match()函数是一样的,唯一区别就是查找的位置不用固定在文本的开头

findall(pattern,string,flags = 0)
作为 re 模块的三大搜索函数之一,findall()与match()和search()的不同之处在于,前两者都是单值匹配,找到一个就忽略会面,直接返回不再找了。而findall()是全文查找,它的返回值是一个匹配到的字符串的列表。这个列表没有group()方法,没有start、end、span,更不是一个匹配对象,仅仅是个列表,如果一项都没有匹配,则返回空的列表

split(pattern,string,flags = 0,maxsplit)
re 模块的split()方法和字符串的split()方法类似,都是利用特定的字符去分割字符串,但是re 模块的split()可以使用正则表达式,更加灵活、强大。 maxsplit参数用于指定分割的次数

sub(pattern,repl,string,count = 0,flags = 0)
sub()方法类似于字符串的replace()方法,用指定的内容替换匹配到的字符,可以指定替换次数

4.分组功能

Python的 re 模块有一个分组功能。所谓的分组就是去已经匹配到的内容,再筛选出需要的内容,相当于二次过滤。 实现分组用圆括号() ,而获取到分组的内容则是靠group()、groups()