13.常见模块re-正则模块
1.
元字符. ^ $ * + ? {} [] | () #大多数字母和字符会匹配它们自身,有少数特殊字符我们称为元字符,它们不能匹配自身 #子组匹配和模式重复次数等 . # 匹配除换行符之外的所有的字符 # 用于转义 d # 匹配0~9的数字 s # 匹配任意的空白符,包括空格,制表符(Tab),换行符等 w # 匹配字母或数字或下划线或汉字等 b # 表示单词的边界 . # 表示匹配点号本身 D、S、W、B # 是与小写的相反的作用 ^ # 脱字符,匹配输入字符串的开始的位置 $ # 匹配输入字符串的结束位置 #匹配次数 {M,N} # M和N 为非负整数,其中M<=N 表示前面的匹配M~N次 {M,} # 表示需要匹配M次 以上 {,N} # 等价于{0~N} {N} # 表示需要匹配N次 * # 匹配前面的子表达式零次或多次,等价于{0,} + # 匹配前面的子表达式一次或多次,等价于{1,} ? # 匹配前面的子表达式零次或一次,等价于{0,1} #注:*?、+?、{n,m}? 贪婪与懒惰 #子组匹配 [ ] # 字符类,将要匹配的一类字符集放在[]里面 #例如: [ . ? * ( ) {} ] # 匹配里面的这些符号 [0-9] # 匹配0到9的数字相当于d [^d] # 匹配除数字以外的字符,相当于D [a-z] # 匹配所有的小写字母 [^a-z] # 匹配非小写字母 | # 相当于或(or)分支条件 #例如: A | B # 匹配字母A或者B 与[AB]是一样的 #分组 () #分组,将要匹配的一类字符集放在()组成一个小组 # 正则: 就是匹配字符串 import re s= ‘gjianengasfasdfjianeng12335748‘ ##### 普通匹配 自己匹配自己 # 你要找的内容 查找的对象 a = re.findall(‘jianeng‘,s ) ## 搜索字符串,以列表类型返回全部能匹配的子串 print(a) #search() # 在一个字符串中搜索,匹配正则表达式的第一个位置,返回match对象 a = re.search(‘jianeng‘,s) print(a) #### 正则 语法 a = re.findall(‘d{3}‘,s) print(a) ### . ^ $ * + ? {} [] | () # . # 匹配除换行符之外的所有的字符 dian = re.findall(‘.‘,‘a我st+=_#$dfansdfas‘) print(dian) # 用于转义 # d # 匹配0~9的数字 d = re.findall(‘d‘,‘abc123‘) print(d) # s # 匹配任意的空白符,包括空格,制表符(Tab),换行符等 s = re.findall(‘s‘,‘abcnbbtsadf sdf‘ ) print(s) # w # 匹配字母或数字或下划线或汉字等 w = re.findall(‘w‘,‘asd_456我i‘) print(w) # b # 表示单词的边界 b = re.findall(r‘readb‘,‘read readapple‘) print(b) # r‘readb‘,取消 字符串转义 ## 取消 字符串 转义 r 例: r‘readb‘ ## 取消 正则 转义 例: . # . # 表示匹配点号本身 dian = re.findall(r‘.‘,‘asdf.asd‘) #D、S、W、B # 是与小写的相反的作用 D= re.findall(r‘D‘,‘a123pple‘) print( D) S = re.findall(‘S‘,‘abcnbbtsadf sdf‘ ) print(S) b = re.search(r‘readB‘,‘read readapple‘) print( b) ## ^ # 脱字符,匹配输入字符串的开始的位置 t = re.search(‘^jianeng‘,‘jianengsadfsjianeng‘) print(t) # $ # 匹配输入字符串的结束位置 t = re.search(‘jianeng$‘,‘jianengsadfsjianeng‘) print(t) ##匹配次数 c = re.findall(‘d{3}‘,‘89ahs123gvbsd34534566‘) print( c ) #{M,N} c = re.findall(‘d{2,5}‘,‘89ahs123gvbsd34534566‘) print( c ) #{M,} # 表示需要匹配M次 以上 c = re.findall(‘d{2,}‘,‘89ahs123gvbsd34534566‘) print( c ) # {,N} # 等价于{0~N} c = re.findall(‘d{,2}‘,‘89ahs1s‘) print( c ) # * # 匹配前面的子表达式零次或多次,等价于{0,} x = re.findall( ‘d*‘,‘fds1525sdfg455‘ ) print(x) # + # 匹配前面的子表达式一次或多次,等价于{1,} x = re.findall( ‘d+‘,‘fds1525sdfg4554585444444545165854444444‘ ) print(x) # ? # 匹配前面的子表达式零次或一次,等价于{0,1} x = re.findall( ‘d?‘,‘fds1525sdfg455‘ ) print(x) #注:*?、+?、{n,m}? 贪婪与懒惰 # 贪婪 , 满足要求,选最大的 tan = re.findall(‘a.*t‘,‘amount at about‘) print(tan) # 懒惰,满足要求,就结束 lan = re.findall(‘a.*?t‘,‘amount at about‘) print(lan) # #子组匹配 # [ ] # 字符类,将要匹配的一类字符集放在[]里面 zi = re.findall(‘[a-z0-9]‘,‘fsadf44565_5435‘) print(zi) # a | b| c zi = re.findall(‘[abc]‘,‘fsadf44565_543b5c‘) print(zi) # [ . ? * ( ) {} ] # 匹配里面的这些符号 zi = re.findall( ‘[.?*(){}]‘,‘.?*(){}‘) print( zi ) ## [^d] 取反的意思 zi = re.findall( ‘[^d]‘,‘123456abc‘) print(zi) ##| # 相当于或(or)分支条件 h = re.findall(‘abc|jianeng‘,‘abcsdfsajianeng‘) print(h) # () #分组,将要匹配的一类字符集放在()组成一个小组 zu = re.search(‘xx(jianeng)xx‘,‘jianengfsxxjianengxxdgffgfxxjianengxxfgf‘) print(zu ) # 要jianeng ,xx(jianeng)xx zu = re.findall(‘xx(jianeng)xx‘,‘jianengfsxxjianengxxdgffgfxxjianengxxfgf‘) print(zu ) ? #re模块的常用方法 search() # 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象 findall() # 搜索字符串,以列表类型返回全部能匹配的子串 finditer() # 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象 sub() # 替换 类似于字符串中 replace() 方法 compile() # 编译正则表达式为模式对象 re.split() # 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型 #获取 match对象 中的信息 group() # 返回匹配到的字符串 start() # 返回匹配的开始位置 end() # 返回匹配的结束位置 span() # 返回一个元组表示匹配位置(开始,结束) example: #eg1 #正则元字符 #eg3 #eg4 ‘‘‘ ^ 脱字符,匹配输入字符串的开始的位置 #eg. re.search(r‘D‘,‘abc123‘) re.search(r‘^a‘,‘abc.123‘)
re.findall(r‘d{1,}‘,‘12ab234567890‘) re.findall(r‘d*‘,‘12ab234567890abc1‘) #{0,} re.findall(r‘d*?‘,0}‘,‘12ab234567890abc‘) re.findall(r‘d+?‘,‘12ab234567890abc‘) ‘‘‘ #[] re.findall(r‘[d]‘,‘12ab23344‘) re.findall(r‘[.?*(){}]‘,‘12ab.?*(){}23344‘)
re.findall(r‘(23)‘,‘12ab.?*(){}23344‘)
re.sub(‘i‘,‘o‘,‘pythin‘,1) re.split(r‘s‘,‘agg bbw cee‘)
2.作业现在要求大家定义这样的一个类: ? import re class A(str): # 继承str类即可含有字符串所有方法 def counts(self): # print(self) num = len(re.findall(r‘d‘,self)) letter = len(re.findall(r‘[a-zA-Z]‘,self)) # print(re.findall(r‘[a-zA-Z]‘,self)) space = len(re.findall(r‘s‘,self)) other = len(self) - num - letter - space count_number = {"num":num,"letter":letter,"space":space,"other": other} return count_number string = A(‘My name is Which,age18‘) # print(string) # print(string.upper()) print(string.counts()) # s = ‘hello‘ # s.upper() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |