python 基础(十四) 正则表达式

时间:2024-11-08 18:07:20

正则表达式

概念: 正则匹配就是一个模糊的匹配 只要符合我的匹配规则 就会认为是正确的数据(精确的匹配)

1.[]     #代表原子表把想要匹配的内容写入原子表中   匹配包含的任意一位字符
    [a]     #匹配小写字母a
    [ab]    #匹配小写字母a或者b
    [aAbB]  #匹配字母a或b
    [195]   #匹配任意一位数字
    [a-z]   #匹配任意一位小写字母
    
2.^    #在原子表外称之为以...作为开头   放在原子表内叫取反  相当于 \A
    ^[abc]  #匹配以a/b/c字符作为开头
    [^abc]  #匹配任意一位小写字母a/b/c以外的字符
    ^abc    #匹配以小写字母abc开头的内容
    ^[0-9]
    ^[a-zA-Z0-9]
3.$   #以...作为结尾  相当于 \Z
    ^[1][3-9][0-9]{9}$  ^和$通常是组合使用 真正的限制匹配数据的正确性
4.{m}  #控制匹配前面数量的m次  不能单独使用 和普通的内容一起使用或者和原子表
    #匹配3个a的操作
    [a][a][a]
    aaa
    a{3}
    [a]{3}
    {4}  #错误写法
    [a-zA-Z]{3}
5.{m,n}  #控制匹配前面数量的m-n次  不能单独使用 和普通的内容一起使用或者和原子表
    #匹配qq号码
    5-11
    ^[1-9][0-9]{4,10}$
    
    010-778192
    101-621331
    [01]{3}\-[0-9]{6}
 
6.{m,}   #表示匹配前面数量至少m次
    [a-z]{3,}
    #1 匹配1-99的正则
    [1-9][0-9]{0,1}
    #2 匹配任意一位正负整数和小数 ?
    [\-]{0,1}[1-9]
7.?   #可有可无  匹配前面的正则表达式的 0次或者一次  类似于 {0,1}  或指明一个非贪婪的限定符
    [1-9][0-9]?
    [\-]?[1-9]
8. .   #匹配换行符\n以外的任意一位字符
9. *   #匹配前面表达式的任意次 相等于{0,}
10. .*  #匹配除换行符以外的任意字符任意次  贪婪模式
11. .*?  #匹配除换行符以外的任意字符任意次   非贪婪模式
12.  +   #匹配前面表达式的至少1次 相等于{1,}
13. .+   #匹配除换行符以外的任意字符至少1次  贪婪模式
14. .+?   #匹配除换行符以外的任意字符至少次   非贪婪模式
15. ()    #1.代表一个单元   2.子存储
16. |  #表示或
#匹配手机号码或者qq号码
(^[1-9][0-9]{4,10}$)|(^[1][3-9][0-9]{9}$)

正则函数

使用正则函数需要导入内置的 re模块

import re

修正符

  1. re.I 忽略大小写

  2. re.M 多行模式 改变^和$的作用

  3. re.S 改变.的行为 可以匹配换行符

特殊意义的字符

\d 相当于 [0-9]

\D 相当于 [^0-9]

\w 相当于 [a-zA-Z0-9_]

\W 相当于[^a-zA-Z0-9_]

\s 匹配空白字符

\S 匹配非空白字符

(1) re.match(pattern,string,flags) 匹配一次 必须从头开始

pattern:正则表达式

string: 要匹配的字符串的内容

flags: 修正符

返回结果:

匹配成功 返回对象

匹配失败 返回None

注意:

match必须从第一位开始匹配 如果第一位没有符合的 则匹配失败 类似于在正则前方添加^
只匹配一次

取值

  1. group() 将值取出

    group([index]) 索引可有可无 如果正则内没有存在括号 则不需要传index

  2. groups() 正则内括号的值 以元组形式进行返回

(2) re.search(pattern,string,flags) 匹配一次包含就可以

pattern:正则表达式

string: 要匹配的字符串的内容

flags: 修正符

返回结果:

匹配成功 返回对象

匹配失败 返回None

只匹配一次

和match的区别 只要字符串中包含就可以

(3) re.findall(pattern,string,flags) 匹配多次

pattern:正则表达式

string: 要匹配的字符串的内容

flags: 修正符

返回结果:
匹配成功返回装有数据的列表
匹配失败返回空列表

(4) re.finditer() 将查询结果变成迭代器进行返回 配合next方法进行操作

next(re.finditer())

(5) re.sub/re.subn 正则替换 返回匹配的次数/不返回匹配的次数

sub(pattern, repl, string, count=0, flags=0)
subn(pattern, repl, string, count=0, flags=0)

(6) re.split 正则拆分

split(pattern, string, maxsplit=0, flags=0):

(7) re.compile(pattern,flags) 编译成正则表达式 可以多次使用

将正则和函数分开使用 提高执行效率 正则表达式 可以多次使用

使用方法

pattern = re.compile("pattern",flags)

pattern.函数名(匹配的字符串)

修正符

re.I(re.IGNORECASE)

re.S(re.DOTALL)

re.M(re.MULTILINE)