1 数字: 2 [0-9] 3 4 字母: 5 小写 [a-z] 6 大写 [A-Z] 7 大小写 [A-Za-z] 8 9 数字和大小写字母[A-Z0-9a-z] 10 11 大小写字母+下划线: 12 [A-Z0-9a-z_]
正则式转义:
在字符组当中 -是有特殊意义的,如果我们想取消这个横杠的特殊意义
需要使用作为转义符
1 字符组之外的其他带有特殊规则的元字符: 2 [0-9] d 匹配任意一个数字 digit 3 [A-Z0-9a-z_] w 标识符 4 匹配回车换行 5 匹配制表符 table 6 空格 本身匹配 空格 7 s 匹配所有的空白 d 匹配所有的数字 w 匹配数字字母以及下划线 8 匹配一个单词的边界 9 反义词 10 W 除了数字字母下划线之外的所有 11 D 除了数字之外的所有 12 S 除了空白之外的所有 13 14 . 匹配换行符之外的所有字符 15 16 匹配所有 :[Dd] [Ww] [Ss] 17 非字符组 :[^123]除了123之外的都匹配 18 19 和结束符 20 ^ 永远在一个规则的最开始 21 $ 永远在一个规则的最末尾 22 ^和$ 规定了这个字符串的长度,并且在这个长度内的内容 23 24 | 或的概念 25 123|456 26 把相对长的永远放在左侧 27 28 www.baidu.com 29 www.oldboy.com 30 31 分组的概念 32 www.(baidu|oldboy).com
1 量词的范围内尽可能多的匹配 2 {n} 表示出现n次 3 {n,} 表示至少出现n次 4 {n,m} 表示出现n-m次 5 ? 表示匹配0次或1次 6 + 表示匹配1次或多次 7 * 表示匹配0次或多次
1 贪婪匹配 :默认的 尽可能多匹配 2 惰性匹配 :需要我们手动设置的 尽可能少匹配 3 a.* 以a开头的任意一个字符串都可以被匹配出来 4 a.*? 非贪婪 5 a.*?x 从a开始匹配,匹配任意长度的字符,遇到一个x就立即停止
re模块:
findall
1 re.findall(pattern, string, flags=0) 2 #根据正则规则从一段内容中查找结果,找到就返回,没找到就返回空列表 3 import re 4 ret= re.findall('d+','alex123yuan234') 5 print(ret) 6 7 分组与re.findall()的结合: 8 import re 9 ret = re.findall('>(w+)<',r'<title>qqxing< itle>') 10 print(ret) # findall永远优先显示分组中的内容 11
个人理解:#分组左右两边输入的内容相当于指定了查找边界,找到了就返回,没找到返回空列表。
search
1 ret = re.search('d+','alex66yuan') 2 if ret: 3 print(ret.group())
1 ret= re.search('d+','alex123yuan234') #找到正则式规则里的第一个就返回元素 2 ret1= re.search('(w*?)(d+)(w*?)(d+)','alex123yuanx234') 3 #按规则将字符串分组,可以按照组的索引取值 4 print(ret) # 结果对象 5 print(ret.group()) 6 print(ret1.group(1)) 7 print(ret1.group(2)) 8 print(ret1.group(3)) 9 print(ret1.group(4))
match:从字符串开头开始找,没找到就报错,找到就返回
1 ret = re.match('d+','123alex266') 2 print(ret) 3 print(ret.group())
1 match可以使用search进行替代 2 re.search('^d+','alexyuan') == re.match('d+','123alex') 3 ret = re.search('^d+','2alexyuan') 4 print(ret.group())
sub :替代,可设置替代次数