Python基础知识:re正则表达式

正则表达式(或RE)是一种小型的、高度专业化的编程语言,内嵌在Python中,仅做字符的匹配。

1、字符类型:

普通字符和元字符;

1)普通字符:大多数的字符和字母都会和自身匹配,比如:

                t2=re.findall('ahh','yahhkkkgggtngslahh')  # 匹配结果['ahh', 'ahh']

2)元字符: . ^  $ * + ? {} [] |  ()   /

  • 匹配除换行符之外的任意字符

  • ^表示匹配字符串的开始,比如^hello'匹配'helloworld'而不匹配'aaaahellobbb

  • $表示匹配字符串末尾,可参考^

  • []用来匹配一个指定的字符集。

  • | 或的含义。匹配|左右表达式任意一个,从左到右匹配,如果|没有包括在()中,则它的范围是整个正则表达式 

    *重复零次或更多次

  • +重复一次或更多次

  • ?重复零次或一次

  • {n}重复n次,{n,}重复n次或更多次,{n,m}重复n到m次

  • \转义字符,后跟元字符,则表示去除特殊功能,\后跟普通字符实现特殊功能,引用序号对应的字组所匹配的字符串,主要有:   

      • \A    只在字符串开始进行匹配    

      • \Z    只在字符串结尾进行匹配    

      • \b    匹配位于开始或结尾的空字符串    

      • \B    匹配不位于开始或结尾的空字符串    

      • \d    相当于[0-9]    

      • \D    相当于[^0-9]    

      • \s    匹配任意空白字符:[\t\n\r\r\v]    

      • \S    匹配任意非空白字符:[^\t\n\r\r\v]    

      • \w    匹配任意数字和字母:[a-zA-Z0-9]    

      • \W    匹配任意非数字和字母:[^a-zA-Z0-9]

案例使用:

案例1:.匹配除换行符之外的任意字符,一个.代表一个字符,多个.代表多个字符

案例2:^必须以字符串开始

案例3:$匹配字符串的结束,必须以字符串结束

案例4:*匹配*前一个字符0次或无限次,比如abc*,可以是ab、abc、abcc、abcccc..等

案例5:+匹配+前一个字符1次或无限次

案例6:?匹配前一个字符0次或1次

案例7:{m}匹配前一个字符m次

案例8:{m,n}匹配前一个字符m-n次,如果m省略,则指重复0-n次,如果n省略,则指重复m-无限次

案例9:[...]字符集的字符以及转意

    字符集可以逐个列出,也可以给出范围如[abc]或[a-c],第一个字符如果是^,则表示取反,如[^abc]表示不是abc的其他字符。所有特殊的字符在字符集中都失去其原有的特殊含义,在字符集中,如果要使用]、-或^,可以在前面加上反斜杠,或把]、-放在第一个字符,把^放在非第一个字符r

其他的转意字符:

  • \d 匹配任何十进制数:它相当于类[0-9]。

  • \D 匹配任何非数字字符:它相当于类[^0-9]

  • \s 匹配任何空白字符:它相当于类[\t\n\r\f\v]

  • \S 匹配任何非空白字符:它相当于类[^\t\n\r\f\v]

  • \w匹配任何字母数字字符,它相当于类[a-zA-Z0-9]

  • \W匹配非任何字母或数字字符,即[^\w]

  • \b 匹配一个单词边界,也就是指单词和空格间的位置,匹配\w和\W之间,比如一些特殊的字符标点,空格等。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

  • B [^\b]

案例10:\b想要匹配一个单词I,而不是单词中包含的I


2、主要函数:

  • match(正则模型, 要匹配的字符串, flags=0),从起始位置开始匹配,匹配成功,则返回一个对象,未匹配成功返回None,和search区别是是否从第一个位置开始。需要配合

  • search(正则模型, 要匹配的字符串, flags=0,浏览整个字符串去匹配,直到找到一个匹配,未匹配成功返回None

  • findall(正则模型, 要匹配的字符串, flags=0) 浏览全部字符串,匹配所有合规则的字符串,匹配到的字符串放到一个列表中,未匹配成功返回空列表。匹配成功的字符串,不在参与下次匹配

  • split(正则模型, 要匹配的字符串, 指定分隔个数, flags=0) 根据正则匹配分割字符串,返回分割后的一个列表

  • sub(正则模型, 要替换的字符串, 要匹配的字符串, 指定匹配个数, flags=0),替换匹配成功的指定位置字符串。

  • subn(正则模型, 要替换的字符串, 要匹配的字符串, 指定匹配个数, flags=0),替换匹配成功的指定位置字符串,并且返回替换次数,可以用两个变量分别接收。

  • re.compile(pattern[, flags]):把正则表达式语法转化成正则表达式对象。flags定义包括:
    re.I:忽略大小写
    re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
    re.M:多行模式
    re.S:’ . ’并且包括换行符在内的任意字符(注意:’ . ’不包括换行符)
    re.U: 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库

group,分组是去已经获取的东西里面再去匹配

  • group() 获取匹配到的所有结果,不管有没有分组将匹配到的全部拿出来,有参取匹配到的第几个如2

  • groups()  获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分的结果

  • groupdict() 获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分定义了key的组结果


案例11:match和group效果

案例12,groups的效果,一旦表达式有()就是分组

案例13,groupdict的效果

案例14,findall+分组

案例15,split+分组

案例16:替换sub

 
 

图片来源网址:https://www.jianshu.com/p/df2e26c5b2b5

程序链接:https://pan.baidu.com/s/1nuDdaGh 密码:dvzj

猜你喜欢

转载自blog.csdn.net/weixin_41044523/article/details/79295858