string提供的是完全匹配
s = 'hello world' ret = s.find('llo') # 找到字母llo,运行后显示位置 print(ret) # 2 ret1 = s.replace('ll','xx') # 用 xx 替换 ll print(ret1) # hexxo world ret2 = s.split('w') # 以w为界限,分割字母,但w会被分割出去 print(ret2) # ['hello ', 'orld']什么是正则表达式:用一些定义好的特定字符,或者特定字符的集合,组成一个规则,用这个规则,对字符串进行过滤,通过 import re 来调用 一、常用函数 1. match() 函数:从起始位置匹配一个符合规则的字符串,匹配成功返回一个对象,未匹配成功返回None
用法:match(pattern, string, flags=0) pattern: 正则模型 string : 要匹配的字符串 falgs : 匹配模式2. search() 函数:查看整个字符串,匹配第一个符合规则的字符串,未匹配成功返回None
用法:search(pattern, string, flags=0) pattern: 正则模型 string : 要匹配的字符串 falgs : 匹配模式3. split() 函数:根据匹配模型分割字符串,返回分割后的列表
用法:split(pattern, string, maxsplit=0, flags=0) pattern: 正则模型 string : 要匹配的字符串 maxsplit:指定分割个数 flags : 匹配模式4. findall() 函数:查看整个字符串,匹配所有符合规则的字符串,把匹配到的字符串放到一个列表中,未匹配成功返回空列表
用法:findall(pattern, string, flags=0) pattern: 正则模型 string : 要匹配的字符串 falgs : 匹配模式二、元字符介绍 1. . 通配符 匹配任意一个字符,换行符n除外
ret = re.findall('w..l','hello world') print(ret) # ['worl']2. ^ 尖角符
ret = re.findall('^h...f','hjisfnlhello') #只从最初开始匹配 print(ret) # ['hjisf']3. $ 从最后开始匹配
ret = re.findall('e..o$','hjisfnlalexhello') print(ret) # ['ello']4. | 表示或的意思,匹配前面或者后面
ret = re.findall('a|b','acbbcbaac') print(ret) # ['a', 'b', 'b', 'b', 'a', 'a']5. * 0个或多个字符,贪婪匹配,尽可能多取,取值范围[0,+oo] 贪婪匹配:尽可能多的取匹配
ret = re.findall('ba*','afdhfhnandbbbbbaaabaaaaaaaaa') print(ret) # ['b', 'b', 'b', 'b', 'baaa', 'baaaaaaaaa']6. 转义符 改变后面字符的意思,使其失去特殊意义
val = re.findall('1.*','11*222223456') # 没有使用转义符,*就会进行贪婪匹配 ret = re.findall('1.*','11*222223456') # 使用转义符,*就变成了一个普通字符 print(val) # ['11*222223456'] print(ret) # ['11*'] ret1 = re.findall('\t','asdfatsd4654') # 如果要匹配字符串中t,需要在t前加,让t中的失去特殊意义 print(ret1) # ['t'] ret2 = re.findall(r't','asdfatsd4654') # 也可以在‘’号前加r,让其不进行转义,效果同上 print(ret2) # ['t']7. + 取1个或多个字符,贪婪匹配,尽可能多取,取值范围[1,+oo]
ret1 = re.findall('ab+','afdhfhnandbabaaaaabbbaaabbaaa') print(ret1) # ['ab', 'abbb', 'abb'] ret2 = re.findall('a+b','afdhfhnandbabaabaaaaaaaaaab') print(ret2) # ['ab', 'aab', 'aaaaaaaaaab']8. ? 取0个或1个字符,贪婪匹配,尽可能多取,取值范围[0,1]
ret = re.findall('a?b','afdhfhnandbabaabbbaaaaaaaabaa') #匹配到0-1个a print(ret) # ['b', 'ab', 'ab', 'b', 'b', 'ab']9. {x} 对前一个字符取x次
a = re.findall('a{5}b','aaaaaaaaaaaaab') #匹配5个a,一个b print(a) # ['aaaaab'] b = re.findall('a{1,3}b','aaaaaaabbbbbbbbbb') #至少有一个a才能匹配成功,最多3个a,非贪婪模式 print(b) # ['aaab']10. [ ] 字符集合 可在括号中添加范围
ret = re.findall('[a-z]','adsoAHK12387farSDGKAgag') # 取出字符串中的所有小写字母 print(ret) # ['a', 'd', 's', 'o', 'f', 'a', 'r', 'g', 'a', 'g'] ret1 = re.findall('[A-Z]','adsoAHK12387farSDGKAgag') # 取出字符串中的所有大写字母 print(ret1) # ['A', 'H', 'K', 'S', 'D', 'G', 'K', 'A'] ret2 = re.findall('[0-9]','adsoAHK12387farSDGKAgag') # 取出字符串中的所有数字 print(ret2) # ['1', '2', '3', '8', '7'] ret3 = re.findall('[^A-Z]','adsoAHK12387farSDGKAgag') # ^号表示取反,此处为取所有除大写字母外的字符 print(ret3) # ['a', 'd', 's', 'o', '1', '2', '3', '8', '7', 'f', 'a', 'r', 'g', 'a', 'g']11. ( ) 分组匹配
ret = re.findall('(ab){2}','abababab') # 这里表示2个ab完成一次匹配,匹配出来的内容为ab print(ret) # ['ab', 'ab']三、预定义字符 1. d 匹配任何十进制数,相当于 [0-9]
ret = re.findall('d','adfadsf123123') print(ret) # ['1', '2', '3', '1', '2', '3']2. d+ 匹配一位或者多位数字
ret = re.findall('d+','ad456456fadsf123123') print(ret) # ['456456', '123123']3. D 匹配任何非数字字符,相当于 [^0-9]
ret = re.findall('D','ad456__456fadsf123123') print(ret) # ['a', 'd', '_', '_', 'f', 'a', 'd', 's', 'f']4. s 匹配任何空白字符,例如: t n f v 还有空格
ret = re.findall('s','ad456__456 fadsf123t12n3') print(ret) # [' ', ' ', 't', 'n']5. S 匹配任何非空白字符,[^tnfv]还有空格
ret = re.findall('S','ad_456 f13t12n3') print(ret) # ['a', 'd', '_', '4', '5', '6', 'f', '1', '3', '1', '2', '3']6. w 匹配包括字母、数字、汉字、下划线,相当于 [a-zA-Z0-9]
ret = re.findall('w','ad_456 f13t12n3') print(ret) # ['a', 'd', '_', '4', '5', '6', 'f', '1', '3', '1', '2', '3']7. W 匹配"非"字母、数字、汉字、下划线,相当于 [^a-zA-Z0-9]
ret = re.findall('W','ad_456 f13t12n3') print(ret) # [' ', ' ', 't', 'n']8. A 匹配字符串开头
ret = re.findall('Aad....','ad_456 f13t12n3') print(ret) # ['ad_456']9. Z 匹配字符串结尾
ret = re.findall('d+Z','ad_456 f13t12n333') print(ret) # ['333']10. b 匹配位于开始或者结尾的空字符串
ret = re.findall(r'b','tad_45 6f1312333n') # 中间的空格是上一个的结尾,第二个的开始,所以会匹配两次 print(ret) # ['', '', '', '']11. B 匹配不位于开始或结尾的空字符串
ret = re.findall('dB','ad_456 f13 12 3') # 检索内容不能位于开头或者结尾 print(ret) # ['4', '5', '1', '1']
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)