正则表达式

正则表达式

一种匹配字符串的表达式,使用re模块。正则表达式是一种独立的语法,和python没有任何的关系

一、功能

  • 可以制定一个规则
    • 来确认某一个字符串是否符合规则。
    • 从打断的字符串中找到符合规则的内容。
  • 程序领域
    • 登陆注册页面的表单验证
    • 爬虫
  • 自动化开发
    • 日志分析

二、基础的语法

(一)、元字符

  • 方括号:字符组表示的是约束在一个字符的位置上能够出现哪些内容
    • 约束范围分类:
      • [A-Z]匹配字符串中所有的大写字母
      • [a-z]匹配字符串中所有的小写字母
    • 约束范围的混合使用
      • [0-9][A-Z][a-z]:
        • 首先表示的匹配的是三个字符,必须是三个,不能多也不能少。
        • 然后表示得是第一个字符必须是数字,第二个字符必须是大写字母,第三个字符必须是小写字母。

          字符组中的约束字符内在的依赖的条件是按照ASCII来进行的,每一个字符都对应一个ASCII标码,约束范围中字符的字符
          对应的ASCII码的顺序必须是从小往大,不能反过来,例如a-Z可以,但是A-z不行,因为A的编码比a的编码大。

  • 元字符
    • \d:等同于0-9,表示的是0-9之间的任意数字;d的全称digit
    • \w:等同于[0-9a-zA-z_],表示的是该字符可以是数字、大写字母、小写字母或者是下划线,其他的不能匹配, w全称word
    • \s:等同于任意制表符\t、空格和换行符\n,s的全称space
      • \n:单独的匹配换行符
      • \t:单独的匹配制表符
    • \D:匹配非数字
    • \W:匹配非数字、字母、下划线
    • \S:匹配非空白(制表符、空格和换行符)
    • [\w\W]、[\s\S]和[\d\D]都表示全集,即所有的字符都满足要求
    • \b:匹配一个单词的边界
      • 匹配单词的开头:字母\b,例如hello,匹配开头格式为:\bh
      • 匹配一个单词的结尾:\b字母, 例如hello,匹配结尾格式为:o\b
    • ^:匹配字符串的开始
    • $:匹配字符串的结尾
    • |:或关系,只能从两个中匹配一个,例如:a|b, 只能匹配a或者b
    • .:点号匹配换行符外的所有字符。如果要匹配点号必须使用转义字符,即.表示点号。
    • ?:表示的是把未匹配的字符也当作匹配上的字符,当使用?时需要注意的是当没有写任何内容的时候也表示匹配上了一个字符。
      使用?主要用在修饰的字符可有可无或者是这个字符可以选择的情况下,例如:\d.?\d里点号是可有可无的,整数和一位小数都符合要求
    • [^]: 匹配的是非字符组,即字符组里的字符都不能匹配。例如a[^abc]匹配第一个字符是a,第二个字符是abc以外的任意字符,^在这里起到的作用就是去反。
      除了这种情况,其他的情况^都在字符组外.

      需要注意的是:
      或关系两头如果有重合的部分,那么必须把长的一方放在'|'的前边

(二)、量词

量词限制的是字符的个数,即同一个字符出现的次数

  • 量词的使用必须用{}括起来,
  • 量词只能修饰前边一个字符,其他字符修饰不了,例如:[^a][\d]{4}匹配的是第一个字符是a以外的任意字符,然后是任意数字字符4个
  • 在数字后加上逗号表示重复至少几次,例如:[^a][\d]{4,}匹配的是第一个字符是a以外的任意字符,然后是任意数字字符至少4个
  • 在逗号后添加数值,表示最多可以重复几次。例如:[^a][\d]{4,9}匹配的是第一个字符是a以外的任意字符,然后是任意数字最少4个最多9个。
  • +:加号表示重复一次或者多次
  • ?:问号表示重复零次或者一次
  • *:表示重复零次或者任意多次

    、?和 使用的时候不能加{},其他的数字使用的时候必须加上{}

  • ?的特殊用法:(惰性匹配/非贪婪匹配)
    在能匹配上的情况下,匹配尽量少的结果。
    • 在量词后加一个?: 例如:李.{1,3}?和,"李莲英和"符合要求,在满足上述要求的情况下匹配最少的结果
    • ?: 例如:匹配规则 <.?>, 字符串:<123214546576>dafsgfgdf<12342354>
      • 如果匹配规则不加?,会从头开始一直匹配到最后,如果最后一位是>,那么所有的字符都会匹配上,如果最后一位不是>,
        到结尾后进行回溯算法,从后往前找到最后一个>,>前的都是匹配上的。
      • 如果匹配规则加上?,那么当匹配到第一个>时就停止了,>前边的都是匹配上的。

        .*?x这种形式最为常见,匹配任意字符直到找到x

    • ??:[.??]表示的是可以匹配1到无数个点号
    • +?

(三)、分组

分组使用()把多个字符转换成一个整体的字符,这个字符可以和单字符一样使用
例如:匹配整数和小数的正则

  • 使用惰性匹配正则:\d.?\d+|\d ,这里需要主要的是|前和后都分别是一个整体。
  • 使用分组匹配: \d(.\d+)?,这里注意的是()内是一个整体,?修饰前一个字符,分组字符只能出现零次或者一次。

三、python中转义符''

在python中''表示的是转义符。

  • 在字母n前加上,表示的是换行符,在\n前加上\表示的是普通的\n
  • 在字母t前加上,表示的是制表符,在\t前加上\表示的是普通的\t
  • 在\前加上\后两个\表示的是普通的
  • (匹配的是普通的(,)匹配的是普通的)
  • 在字符串前加上r表示的是字符串中\不进行转义,例如:r"\User\lizhi\Application",打印的结果就是\User\lizhi\Application

四、总结

  • 纯元字符
  • 元字符加量词,默认进行的是贪婪匹配
  • 元字符加量词?,默认进行的是非贪婪匹配
  • [()+*?/.$]这些在字符组中都会现原形,都表示原有的意义。
  • [-]减号只有写在首位的时候才表示减,其余部分都表示的是范围

    量词只修饰前边一个元字符

你可能感兴趣的:(正则表达式)