一种匹配字符串的表达式,使用re模块。正则表达式是一种独立的语法,和python没有任何的关系
一、功能
- 可以制定一个规则
- 来确认某一个字符串是否符合规则。
- 从打断的字符串中找到符合规则的内容。
- 程序领域
- 登陆注册页面的表单验证
- 爬虫
自动化开发
方括号:字符组表示的是约束在一个字符的位置上能够出现哪些内容
- 约束范围分类:
- [0-9]:匹配字符串中所有0-9之间的数字
- [A-Z]匹配字符串中所有的大写字母
- [a-z]匹配字符串中所有的小写字母
- 约束范围的混合使用
- [0-9A-Za-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][\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
四、总结
纯元字符
- 元字符加量词,默认进行的是贪婪匹配
- 元字符加量词?,默认进行的是非贪婪匹配
- [()+*?/.$]这些在字符组中都会现原形,都表示原有的意义。
- [-]减号只有写在首位的时候才表示减,其余部分都表示的是范围
量词只修饰前边一个元字符