正则表达式

概述

  • 定义:
    文本的高级匹配模式,其本质是由一系列字符和特殊符号构成的字串,这个字串即正则表达式。
  • 原理:
    通过普通字符和有特定含义的字符,来组成字符串,用以描述一定的字符串规则,比如:重复,位置等,来表达某类特定的字符串,进而匹配。

re模块

re模块常用方法

  • re.findall(pattern,string,flags = 0)

功能: 根据正则表达式匹配目标字符串内容
参数:
pattern 正则表达式
string 目标字符串
flags 功能标志位,扩展正则表达式的匹配
返回值: 匹配到的内容列表,如果正则表达式有子组则只能获取到子组对应的内容

  • re.split(pattern,string,max,flags = 0)

功能: 使用正则表达式匹配内容,切割目标字符串
参数:
pattern 正则表达式
string 目标字符串
max 最多切割几部分
flags 功能标志位,扩展正则表达式的匹配
返回值: 切割后的内容列表

  • re.sub(pattern,replace,string,count,flags = 0)

功能: 使用一个字符串替换正则表达式匹配到的内容
参数:
pattern 正则表达式
replace 替换的字符串
string 目标字符串
count 最多替换几处,默认替换全部
flags 功能标志位,扩展正则表达式的匹配
返回值: 替换后的字符串

生成match对象

  • re.finditer(pattern,string,flags = 0)

功能: 根据正则表达式匹配目标字符串内容
参数:
pattern 正则表达式
string 目标字符串
flags 功能标志位,扩展正则表达式的匹配
返回值: 匹配结果的迭代器

  • re.match(pattern,string,flags=0)

功能:匹配某个目标字符串开始位置
参数:
pattern 正则表达式
string 目标字符串
返回值:匹配内容match object

  • re.search(pattern,string,flags=0)

功能:匹配目标字符串第一个符合内容
参数:
pattern 正则表达式
string 目标字符串
返回值:匹配内容match object

match对象的方法

span() 
获取匹配内容的起止位置

groupdict() 
获取 捕获组 字典,组名为键,对应内容为值

group(n = 0)
功能:获取match对象匹配内容
参数:默认为0表示获取整个match对象内容,如果是序列号或者组名则表示获取对应子组内容
返回值:匹配字符串

匹配单个字符

字符 功能
. 匹配任意1个字符(除了\n)
[ ] 匹配[ ]中列举的字符
\d 匹配数字,即0-9
\D 匹配非数字,即不是数字
\s 匹配空白,即 空格,tab键
\S 匹配非空白
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符
\b 表示单词边界
\B 表示非单词边界

匹配多个

字符 功能
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有1次
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
匹配前一个字符出现m次
匹配前一个字符出现从m到n次

匹配开头结尾

字符 功能
^ 匹配字符串开头
$ 匹配字符串结尾

贪婪和非贪婪模式

  • 定义:

贪婪模式: 默认情况下,匹配重复的元字符总是尽可能多的向后匹配内容。比如: * + ? {m,n}
非贪婪模式(懒惰模式): 让匹配重复的元字符尽可能少的向后匹配内容。

  • 贪婪模式转换为非贪婪模式

在对应的匹配重复的元字符后加 '?' 号即可

*  ->  *?
+  ->  +?
?  ->  ??
{m,n} -> {m,n}?

正则表达式分组

字符 功能
| 匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串

flags参数扩展

作用函数:re模块调用的匹配函数。如:re.compile,re.findall,re.search....
功能:扩展丰富正则表达式的匹配功能

常用flag:

A == ASCII  元字符只能匹配ascii码
 I == IGNORECASE  匹配忽略字母大小写
S == DOTALL  使 . 可以匹配换行
 M == MULTILINE  使 ^  $可以匹配每一行的开头结尾位置

注意:同时使用多个flag,可以用竖线连接 flags = re.I | re.A

posted @ 2020-06-12 00:14  小屁孩的觉悟  阅读(87)  评论(0编辑  收藏  举报