#!/usr/bin/env python # -*- coding:utf-8 -*- import re print(re.findall(‘alex‘,‘yyyyabbblalexrrreooox‘)) # ”.“ 通配符 匹配除开”\“以外的其他字符 print(re.findall(‘al.x‘,‘yyyyaalqxbbblalexrrreooox‘)) #”^“ 在启始位置匹配: print(re.findall(‘^al‘,‘alyyyyaalqxbbblalexrrreooox‘)) #”$“ 在结束位置匹配: print(re.findall(‘oo.$‘,‘alyyyyaalqxbbblalexrrreooox‘)) #”*“ 表示重复 在出现的位置表示对"前一个"字符可以匹配0到多个字符: print(re.findall(‘al.*a‘,‘alyyyyaalqxbbblalexrrreooox‘)) #”+“ 表示重复 在出现的位置表示对"前一个"字符可以匹配1到多个字符: print(re.findall(‘al.+x‘,‘alyyyyaalqxbbblalexrrreooox‘)) #”?“ 表示重复 在出现的位置表示对"前一个"字符可以匹配0到1个字符: print(re.findall(‘al.?x‘,‘alyyyyaalqxbbblalexrrreooox‘)) #”{}“ 表示重复 在出现的位置表示对"前一个"字符可以匹配指定范围个字符: print(re.findall(‘al.{1,3}x‘,‘alyyyyaalqxbbblalexrrreooox‘)) #”[]“ 表示重复 在出现的位置表示可以匹配指定字符出现请 : print(re.findall(‘a[a-z]d‘,‘acd‘))#a开头 中间出现a-z中任意一个字符 d结尾 都可以匹配 例如 "abd‘,‘acd‘ #在[]中出现的元字符 都没有特殊功效只能匹配成一般字符 除开 ”-“表示范围 "^"表示 非 "\d" 表示 数字 print(re.findall(‘a[^f]d‘,‘acd‘)) #a开头 中间出现非f d结尾 都可以匹配 例如 "abd‘,‘acd‘ print(re.findall(‘a[\d]d‘,‘acd‘)) #a开头 中间出现数字 d结尾 都可以匹配 例如 "a1d‘,‘a5d‘ """ \ 反斜杠后边跟元字符去除特殊功能 反斜杠后边跟普通字符实现特殊功能 \d 匹配十进制数字 相当于[0-9] \D 匹配任何非数字字符 相当于[^0-9] \s 匹配任何空白字符 相当于[\t\n\r\f\v] \S 匹配任何非空白字符 相当于[^\t\n\r\f\v] \w 匹配任何字母数字字符 相当于[a-zA-Z0-9_] \W 匹配任何非字母数字字符 相当于[^a-zA-Z0-9_] \b 匹配一个单词后面的空格 """ #正则表达式的 函数 #match : re.match(pattern,string,flags=0) 只匹配启始位置 并且只匹配一次 找到后退出 r =re.match(‘com‘,‘comwww.runcomoob‘) print(r.group())#输出匹配到的字符 print(r.span())#输出匹配到字符的位置信息 启始位置 和终止位置(0,3) #search : 和match的区别是search匹配任意位置 并且只匹配一次找到后退出 rs = re.search(‘com‘,‘www.runcomoob‘) print(rs.group())#输出匹配到的字符 print(rs.span())#输出匹配到字符的位置信息 启始位置 和终止位置(7,10) #findall: 和上面两个函数方法的 是查询出所有匹配的字符串 ra = re.findall(‘com‘,‘comwww.runcomoob‘) print(ra) #findditer: 匹配方法和 findall一样就是返回值 是返回的一个列表 rr = re.finditer(‘com‘,‘comwww.runcomoob‘) for item in rr: print(item.group()) print(item.span()) #sub 安装匹配的字符串替换内容 参数1-需要匹配的字符串格式 2-替换后内容 3-需要替换的原字符串 rsu= re.sub(‘g.t‘,‘have‘,‘Y get A,I got B ,I gut C‘)#返回替换后的字符串 print(rsu) rsu1 = re.sub(‘g.t‘,‘have‘,‘Y get A,I got B ,I gut C‘,2)#返回替换后的字符串 指定最大替换次数2 print(rsu1) #subn 安装匹配的字符串替换内容 参数1-需要匹配的字符串格式 2-替换后内容 3-需要替换的原字符串 返回值多了 返回替换成功次数 rn= re.subn(‘g.t‘,‘have‘,‘Y get A,I got B ,I gut C‘)#返回替换后的字符串 print(rn) #splite 按照匹配的格式分拆 rp = re.split(‘\d+‘,‘one1tow2tree3four4‘) print(rp) #compile 把正则表达式编译成一个对象 便于多次调用 text = "JGood is a handsome boy, he is cool, clever, and so on..." regex = re.compile(r‘\w*oo\w*‘)#创建正则表达式对象 regex print(regex.findall(text)) #查询所有包含‘oo‘的单词 # r 转意字符 r5=re.search(r‘\\com‘,‘adddss\com‘).group() #匹配‘\com‘ print(r5) #------正则分组::去已经提取到的数据中在提取指定数据 ors="hasaabc dfuojqw halaabc m098u29341" ra1 = re.findall(‘h(\w+)a(ab)c‘,ors)#默认提取到两个 ‘halaabc‘,‘hasaabc‘ 在把其中括号括起来的‘as‘,‘al‘ 取出来分别和后面‘ab‘ # 组一个值 [(‘as‘,‘ab‘),(‘al‘,‘ab‘)] print(ra1) #match 和 search 分组方式一样 origin ="has dfuojqw1m098u29341" r= re.match("h\w+",origin) #一般正则匹配未分组 r=re.match("h(\w+)",origin)#匹配后分组 显示(‘as‘,) r =re.match("h(?P<name>\w+)",origin)#匹配后分组,并把分组结果保存在字典中 key为name print(r.group()) print(r.groups()) print(r.groupdict()) #splite orr = "hello alex bcd alex lge alex acd 19" rs = re.split(‘(alex)‘,orr,1) #分组后 把匹配值 也显示出来[‘hello ‘, ‘alex‘, ‘ bcd alex lge alex acd 19‘] rrs = re.split(‘alex‘,orr,1)# 未分组,只才分[‘hello ‘, ‘ bcd alex lge alex acd 19‘] print(rrs) print(rs)
时间: 2024-11-12 16:31:03