正则表达式
什么是正则表达式
正则表达式也叫做匹配模式(Pattern),它由一组具有特定含义的字符串组成,通常用于匹配和替换文
本
正则表达式能很大程度的简化开发的复杂度和开发的效率
元字符
- \d 匹配数字
- . 匹配除换行符(\n)以外的任意字符
- \w 匹配大小写字母或数字或下划线或汉字 0-9、a-z、A-Z、_(下划线)、汉字和其他国家的语
言符号,即匹配所有的有效符号 - \s 匹配任意的空白符(如空格、\t)
- ^ 表示以xxx开头
- $ 表示以xxx结尾
- [] 匹配[ ]中列举的字符
反义符
- \D 匹配非数字
- \W 匹配非字母或数字或下划线或汉字,跟\w 正好相反
- \S 匹配任意非空白符
- [^] 列举反义,例如 [^aeiou] 匹配除了 aeiou 这几个字母以外的任意字符
注意[^] 和 ^[] 的区别,他们是不同的
转义符
如果想查找元字符本身的话,比如查找.或者*,就出现了问题:没法指定它们,因为它们会被解释成其它的意思。这时你就必须使用\来取消这些字符的特殊意义。因此,应该使用\ .和 \ *。当然,要查找\本身,你也得用 \ \
建议大家以后在写正则的时候,一定要在正则表达式前面加上r
位数
- * 重复零次或更多次,表示匹配任意位
- + 至少一位(至少有一位,可以有n位)
- ? 0位或1位
- { n } 重复 n 次
- { n, } 重复 n 次或更多次
- { n,m } 重复 n 到 m 次
分组
在正则表达式之中,使用圆括号 ( ) 将正则中包裹起来,会形成正则匹配后的二次筛选
分组最大的好处就是能够形成第二次筛选
re模块常用方法
- search( pattern, string ) 执行正则表达式搜索并且在搜索结束后返回所匹配到的串,只返回第一次匹配到的结果
可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式 - match( pattern, string ) 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none,匹配成功则返回一个匹配的对象
可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式 - findall( pattern, string ) 匹配所有的对象,返回一个列表
- sub ( pattern, repl, string ) 实现查找替换
- split( pattern, string ) 分割字符串,结果返回列表
- finditer( pattern, string ) 返回一个迭代器 iterator,这个 iterator yield match objects.返回顺序、内容和re.findall()相同
- compile( pattern[, flags] ) 用来编译正则表达式模式字符串,并生成 Regular Expression Object,供 match() 和 search() 这两个函数使用
贪婪模式和非贪婪模式(懒惰模式)
(1)在 Python 中正则默认是贪婪模式(个别语言中也可能是非贪婪模式),贪婪模式就是总会尝试
匹配更多的字符。非贪婪模式则反之,总是尝试匹配尽可能少的字符
(2)在*、?、+、{m,n}后面加上?,可以将贪婪模式变成非贪婪模式