python-正则表达式

概念

正则表达式是对字符串操作的一种逻辑公式。用于搜索、替换和解析字符串。

作用

  • 1、给定字符串是否符合正则表达式的过滤逻辑(匹配)
  • 2、从字符串中获想要的特定部分
  • 3、对目标字符串进行替换

常用的字符

符号 描述
. 匹配任意一个字符(除了\n)
[] 匹配列表中的字符
\w 匹配字母、数字、下划线、即a-z,A-Z,0-9,_
\W 匹配不是字母、数字、下划线
\s 匹配空白字符,即空格(\n, \t)
\S 匹配不是空白的字符
\d 匹配数字,即0-9
\D 匹配非数字的字符

常用的限定符

符号 描述
* 匹配零次或者多次
+ 匹配一次或者多次
? 匹配一次或者零次
重复m次
重复m到n次,其中n可以省略,表示m到任意次
至少m次

常用修饰符 - 可选标志

修饰符 描述
re.I 不区分大小写
re.L 做本地识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \B ,\b
re.X 给与更灵活的格式以便将正则表达式写的易于理解

原生字符串

  • 正则表达式里面使用 "" 作为转义字符,可能会造成反斜杠困扰。
  • 使用原生字符解决困扰,使用 r 的前缀

边界字符

字符 描述
^ 匹配字符串的开头
$ 匹配字符串结尾
\b 匹配一个单词的边界
\B 匹配非单词的边界

*** ^ 和 [^m] 中的“^”的含义并不相同,后者“^”表示“除了….”的意思**

匹配多个字符串

  • search()方法搜索多个字符串,使用择一匹配符号 | ,择一符号和逻辑差不多,只要满足其中一个,就匹配成功

分组

  • 一个模式字符串中有用一堆圆括号括起来的部分,这个部分就会作为一组,可以通过group()方法指定组的匹配字符串
字符 描述
(ab) 将括号中的字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分别起组名
(?P=name) 引用别名为name分组匹配到的字符串
  • 用 group 方法获取指定组的值时,组从 1 开始,也就是说,group(1)获取第 1 组的 值,group(2)获取第 2 组的值,以此类推。
  • groups 方法用于获取所有组的值,以元组形式返回。所以除了使用 group(1)获取第 1 组的值外,还可以使用 groups()[0]获取第 1 组的值。获取第 2 组以及其它组的值 的方式类似。

re模块中的常用函数

1、match()方法

  • 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None。
  • 格式语法:re.match(pattern, string, flags=0)
    pattern: 匹配的正则表达式
    string:要匹配的字符串
    flags:标志位,用于控制正则表达式的匹配方式
  • 匹配成功,可以调用对象中的group()方法获取字符串

2、search()方法

  • 在一个字符串中搜索满足文本模式的字符串
  • 语法格式:re.search(pattern, string, flags=0)
    pattern: 匹配的正则表达式
    string:要匹配的字符串
    flags:标志位,用于控制正则表达式的匹配方式

*match() 和 search()的区别

  • match()是从字符串的开始匹配,字符串开始不符合正则表达式,就匹配失败,返回None;而search()是匹配整个字符串,直到找到一个子字符串为止,匹配失败的话,返回None。

3、sub()与subn()方法

  • 这两个函数用于实现搜索和替换功能,功能基本完全一样。不同的是返回值,sub()函数返回的是替换后的结果,subn()函数返回一个元组,元组的第一个元素是替换后的结果,第二个是元素是替换的总数
    语法格式:re.sub(pattern, repl, string, count=0, flags=0)
    pattern: 匹配的正则表达式
    repl: 替换的字符串,也可以是一个函数
    string: 要被替换的原始字符串
    count: 模式匹配后替换的最大次数,默认为 0 表示替换所有匹配的

4、compile()方法

  • 用于编译正则表达式,生成一个正则表达式对象,供给match()方法和search()方法使用
  • 语法格式:re.compile(pattern[,flags])
    pattern: 一个字符串形式的正则表达式
    flags: 可选,表示匹配模式,比如忽略大小写,多行模式等等

5、findall()方法

  • 在字符串中找到正则表达式所匹配的所有子串,并翻译个列表,如果没有找到匹配的,返回空列表
  • 语法格式: findall(pattern, string, flags=0)
    pattern: 匹配的正则表达式
    string: 要匹配的字符串
    flags: 标志位,用于控制正则表达式的匹配方式

6、finditer()方法

  • 和fandall()方法差不多,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

7、split()方法

  • 根据正则表达式分隔字符串,返回一个列表形式的分隔结果,每一个列表元素都是分割的子字符串。
  • 语法格式: re.split(pattern, string[,maxsplit=0, flags=0])
    pattern: 匹配的正则表达式
    string: 要匹配的字符串
    maxsplit: 分隔次数,默认为 0, 不限制次数
    flags: 标志位,用于控制正则表达式的匹配方式

贪婪模式和非贪婪模式

  • 贪婪模式是指python里面数量词默认是贪婪的,尽可能多的匹配字符。非贪婪模式则是尽可能少的匹配字符。
  • 可以在 '*', '?', '+', '{m,n}'后面加上?, 是贪婪模式变成非贪婪模式.
posted @ 2020-11-10 23:41  渗透时长半年的yzai  阅读(124)  评论(0)    收藏  举报