python正则表达式详解

元字符

  . 匹配任意一个字符(不包括换行符)
  [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()返回所有命名的分组
 
 
posted @ 2018-09-17 10:45  所谓水瓶  阅读(1093)  评论(0编辑  收藏  举报