元字符

  . 匹配任意一个字符(不包括换行符)
  [a-z] 字符集合,一个字符的集合,可匹配其中任意一个字符
  [^a-z] 字符集合,匹配除集合内的任意一个字符
  ^ 匹配开始位置,多行模式下匹配每一行的开始
  \b 匹配单词开始或结束位置的字符
  \B 匹配不位于单词开始或结束位置的字符
  \d 匹配一个数字, 相当于 [0-9]
  \D 匹配非数字,相当于 [^0-9]
  \s 匹配一个空白字符,包括换行符、制表符、空格。相当于 [ \f\r\n\t\v]
  \S 匹配非空白字符
  \w 匹配[a-zA-Z0-9_],包括中文
  \W 匹配\w之外的字符
  $ 匹配结束位置,多行模式下匹配每一行的结束
  * 表示前面的正则表达式重复0次或多次
  + 表示前面的正则表达式重复至少1次
  ? 表示前面的正则表达式重复0次或1次
  {n} 重复n次
  {n,} 重复至少n次
  {n,m} 重复n到m次
  \ 转义字符,跟在其后的字符将失去作为特殊元字符的含义,例如\\.只能匹配.,不能再匹配任意字符
  x|y 匹配x或者y
  (pattern) 分组,捕获后会自动分配组号从1开始,key改变优先级
  \数字 匹配对应的分组
  (?:pattern)如果仅仅为了改变优先级,就不需要捕获分组
  (?<name>exp)分组捕获,但是可以通过name访问分组。python语法必须是(?P<name>exp)
  (?=exp) 断言exp一定在匹配的右边出现,表示断言后面一定有exp
  (?<=exp) 断言exp一定在匹配的左边出现,表示断言前面一定有exp前缀
  (?<=...) 逆序肯定环视,表示所在位置左侧能够匹配括号内正则
  (?!exp) 断言exp一定不会出现在右侧,也就是说断言后面一定不是exp
  (?<!exp) 断言exp一定不会出现在左侧

  *? 匹配任意次,但尽可能少重复
  +? 匹配至少1次
  ?? 匹配0次或1次
  {n,}? 匹配至少n次
  {n,m}? 匹配至少n次,至多m次

 

 

python的正则表达式

 

常量 (使用 |位或 开启多种选项)

  re.M 多行模式

  re.S 单行模式

  re.I 忽略大小写

  re.X 忽略表达式中的空白字符

方法

编译

re.compile(pattern, flags=0)

设定flags,编译模式,返回正则表达式对象regex

pattern就是正则表达式字符串,flags是选项。

单次匹配

re.match(pattern, string, flags=0)
regex.match(string[, pos[, endpos]])

match匹配从字符串开头匹配,regex对象match方法可以重设置开始位置和结束位置。返回match对象

re.search(pattern, string, flags=0)
regex.search(string[, pos[, endpos]])

从头搜索直到第一个匹配,regex对象search方法可以重设置开始位置和结束位置。返回match对象

re.fullmatch(pattern, string, flags=0)

regex.fullmatch(string[, pos[, endpos]])

整个字符串和正则表达式匹配

 

全文搜索

re.findall(pattern, string, flags=0)
regex.findall(string[, pos[, endpos]])

对整个字符串,从左到右匹配,返回所有匹配项的列表

re.finditer(pattern, string, flags=0)
regex.finditer(string[, pos[, endpos]])

对整个字符串,从左到右,返回所有匹配项,返回迭代器

 

匹配替换

re.sub(pattern, replacement, string, count=0, flags=0)
regex.sub(replacement, string, count=0)

  使用pattern对字符串进行匹配,对匹配项使用replacement替换。

replacement可以是str,bytes,function
re.sub(pattern, replacement, string, count=0, flags=0)
regex.sub(replacement, string, count=0)

  同sub返回一个元组(new_string, number_of_subs_made)

 

分割字符串(不能指定多个字符进行分割)

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

  分割字符串

 

分组

使用小括号的pattern捕获的数据陪放到组group中

match, search函数可以返回match对象;findall返回字符串列表;finditer返回一个个match对象

如果pattern中使用分组,如果有匹配的结果,会在match对象中

  1.使用group(N)方式返回对象分组,1到N是对应的分组,0返回整个匹配的字符串

  2.如果使用了命名分组,可以使用group('name')的方式分组

  3.也可以使用groups()返回所有组

  4.使用groupdict()返回所有命名的分组