#import re
 
一、我们就re模块(也叫正则模块)介绍:
实现一个编译查找,一般在日志处理或者文件处理时用的比较多
正则表达式主要用于模式匹配和替换工作。
 
 
预定义字符集匹配:
\d:数字0-9
\D:非数字
\s:空白字符
\n:换行符
\r:回车符
re模块数量词匹配:
符号^:表示的匹配字符以什么开头
符号$:表示的匹配字符以什么结尾
符号*:匹配*前面的字符0次或n次
eg:ab* 能匹配a 匹配ab 匹配abb
符号+:匹配+前面的字符1次或n次
符号?:匹配?前面的字符0次或1次
符号{m}:匹配前一个字符m次
符号{m,n}:匹配前一个字符m到n次(包括n次),m或n可以省略,mn都是
正整数
1、match (读音:马区,意思:匹配)
从第一个字符开始匹配,如果第一个字符不是要匹配的类型、则匹配失败并报错
注意:如果规则带了'+',则匹配1次或者多次,无'+'只匹配一次
2、search(读音:色区 ,意思:搜索)
从第一个字符开始查找、一找到就返回第一个字符串,找到就不往下找,找不到则报错
3、findall (意思:查找所有匹配结果)
从第一个字符开始查找,找到全部相关匹配为止,找不到返回一个列表[]
4、compile(读音:肯排偶 意思:编译)
编译模式生成对象,找到全部相关匹配为止,找不到返回一个列表[]
1、match方法
match 方法用于从字符串的头部开始匹配,仅返回第一个匹配的结果~
pattern.match(string[, pos[, endpos]]) 或 re.match(pattern, string[, flags])
pattern.match(string[, pos[, endpos]]) 中的 pos,endpos指定字符串匹配的起始和终止位置,这两个均为可选参数,若不指定,默认从字符串的开头开始匹配~
 
# a="2233113abf123"
#匹配当前字符串中的:\d规则 整数 1个整数 ,匹配到后则不贪婪,如果匹配第一个值不少\d 的格则抛异常
# yy=re.match("\d",a)
# print (yy.group())
#打印结果:2
 
# #带+ 和不带+号的区别:不带+号则值匹配一个或一次,
# #带+号则匹配1词或多次
# y1=re.match( '\d+',a)
# print (y1.group())
# c="a123asdf12" #注意不能以字母开头
# y=re.match('\d',c)
# print(y.group())
#运行结果:有问题 AttributeError: 'NoneType' object has no attribute 'group'
import re
#re.match 从字符串的起始位置开始匹配,如果起始位置匹配不成功的话,match()就返回none
#a="2233113abf123"
#yy=re.match('\ ,a')
#print(yy.group())
 
# 打印结果:TypeError: match() missing 1 required positional argument: 'string'
#意思是:TypeError: match()缺少1个必需的位置参数:'string'
#大写的D:匹配非数字
# c="@@##!!abc123sad"
# y=re.match("\D{4}","c")
#print(y.group()) #报错了
 
#
# y1=re.match("\D{3,10}","c")
# print(y1.group())
 
# y1=re.match('\D+',c)
# print(y1.group()) #打印结果显示:@@##!!abc
 
 
 
2、compile方法
re.compile(pattern[, flag])
步骤: 1)使用 re.compile 方法(传入正则表达式)得到 Pattern 对象 2)通过 Pattern 对象提供的方法对字符串进行匹配查找,返回一个 Match 对象(包含了匹配结果) 3)使用 Match 对象提供的方法获取匹配结果
 
示例:
import re pattern = re.compile(r'\d+') # 返回一个 Pattern 对象 m = pattern.match('123abc456') # 返回一个 Match 对象 print(m.group()) # 输出匹配结果:123
示例中的 compile 方法用于编译正则表达式,返回一个 Pattern 对象,可利用 Pattern 对象中的一系列方法对字符串进行匹配查找。Pattern 对象中的常用方法包括:match,search,findall,finditer,split,sub,subn。当然这些方法也可以使用 re模块直接调用# 输出匹配的完整字符串 print(m.group()) # 123abc456 # 同上,输出匹配的完整字符串 print(m.group(0)) # 123abc456 # 从匹配的字符串中获取第一个分组 print(m.group(1)) # 123 # 从匹配的字符串中获取第二个分组 print(m.group(2)) # abc # 从匹配的字符串中获取第三个分组 print(m.group(3)) # 456 # 从匹配的字符串中获取所有分组,返回为元组 print(m.groups()) # ('123', 'abc', '456') # 获取第二个分组 在字符串中的起始位置(分组第一个字符的索引),start方法的默认参数为0,即字符串的起始索引 print(m.start(2)) # 3 # 获取第二个分组 在字符串中的起始位置(分组最后一个字符的索引+1),通start方法,end方法的默认参数也为0,即字符串结尾的索引+1 print(m.end(2)) # 6 # 第三个分组的起始和结束位置,即 (start(3), end(3)) print(m.span(3)) # (6, 9) # 同 (start(), end()) print(m.span()) # (0, 9)
 
 
 
# import re
# a="1!2!3!4asdf567"
# # yy =re.findall("\d",a)
# # print(yy)
# # #打印结果:['1', '2', '3', '4', '5', '6', '7']
# # y1 =re.findall("\d+",a)
# # print (y1)
# # #打印结果:['1', '2', '3', '4', '567']
# y2=re.findall("\D" ,a)
# print(y2) #打印结果:['!', '!', '!', 'a', 's', 'd', 'f']
# y3=re.findall('\D+',a)
# print(y3)#打印结果:['!', '!', '!', 'asdf']
# y4=re.findall('\+{2}',a)
# print(y4)#打印结果: []
# y5=re.findall('\d{1,4}',a)
# print (y5) #打印结果:['1', '2', '3', '4', '567']
 
 
import re
yy =re.compile('\d') #['1', '2', '3', '4', '5', '6', '7']
y1 =re.compile('\d+') #['1', '2', '3', '4', '567']
y2 =re.compile('\D') #['!', '!', '!', 'a', 's', 'd', 'f']
y3 =re.compile('\D+') #['!', '!', '!', 'asdf']
#
 
3、findall 方法
match方法 和search方法 仅会返回一个结果,findall方法会将字符串中的所有匹配结果以列表的形式返回,注意,返回的是列表,不是 Match 对象~
indall(string[, pos[, endpos]]) # 可选参数 pos,endpos 用于指定查找的起始位置和结束位置,默认 pos 为0,endpos为字符串长度
 
 
all=yy.findall('1!2!3!4asdf567')
print(all) #['1', '2', '3', '4', '5', '6', '7']
a1=y1.findall('sdafdsa')
print(a1) #[]
a2=y2.findall('123456sdafdsa123456')
print (a2) #打印结果:['s', 'd', 'a', 'f', 'd', 's', 'a']
a3=y3.findall('123safds123')
print(a3) #打印结果:['safds']
c="nihaohello,henhaohello"
y3=re.compile('hello')
a=y3.findall(c)
print (a) #显示结果['hello', 'hello']
pattern = re.compile(r'[a-z]+')
res = pattern.findall('123abc456cde')
print(res)
 
2、search 方法 ( 读音:色区 ,意思:搜索,寻找商品)
不同于match方法的从头开始匹配,search方法用于在字符串中的进行查找(从左向右进行查找),只要找到一个匹配结果,就返回 Match 对象,若没有则返回None~
search(string[, pos[, endpos]]) # 可选参数 pos,endpos 用于指定查找的起始位置和结束位置,默认 pos 为0,endpos为字符串长度
 
 
 
4、
 
pattern = re.compile('([0-9]*)([a-z]*)([0-9]*)') m = pattern.match('123abc456')

最新文章

  1. JVM学习(4)——全面总结Java的GC算法和回收机制
  2. Click模块化路由器
  3. Entity Framework 教程
  4. Python print格式化输出
  5. CSS小记
  6. php中数据库的操作
  7. 简单的使用AngularJS的解析JSON
  8. Android 动画-alpha(渐变透明度动画效果)
  9. C#中数组,ArrayList与List对象的区别
  10. Excel坐标自动在AutoCad绘图_3
  11. switch语句(初学者)
  12. Jmeter安装和启动和使用
  13. Python安装常见问题:ModuleNotFoundError: No module named '_ctypes' 解决办法
  14. 2017-2018-2 20165315 实验三《敏捷开发与XP实践》实验报告
  15. 原生js--兼容获取窗口滚动条位置和窗口大小的方法
  16. onMouseDown和onPress的差异AS2
  17. 二维码扫描开源库ZXing定制化
  18. MongoDB 常用shell命令汇总
  19. 课上实践练习——MyOd
  20. 【BZOJ】4861: [Beijing2017]魔法咒语 AC自动机+DP+矩阵快速幂

热门文章

  1. 两表连接各种Join图示,SQL及查询结果
  2. 【盗墓笔记】图解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar
  3. ansible中定义变量的若干方法
  4. 数据库连接池设计和实现(Java版本)
  5. Redis之命令
  6. time模块:时间戳和格式化好的时间表示方法及互相转换方法
  7. Vue+SpringBoot项目实战(一) 搭建环境
  8. Linux常用命令详解(2)
  9. Mac更换鼠标指针样式_mousecape教程
  10. Chrome使用video无法正常播放MP4视频的解决方案