动机:
1、文本处理成为计算机常见的工作之一。
2、对文本内容的搜索、定位、提取是逻辑比较复杂的工作
3、为了快捷方便的解决上诉问题,产生了正则表达式技术。
定义:
文本的高级匹配模式,提供搜索,替换等功能。其本质是由一系列字符和特殊符号构成的字符串,这个字符串既正则表达式。
目标:应用
1、熟练掌握正则表达式符号
2、知道什么是正则表达式,如何
3、能够读懂正则表达式,编写见到的正则匹配
4、会使用re模块操作正则表达式
正则表达式特点:
1、方便文本处理
2、支持语言众多
3、使用灵活,变化多样
数据的分类:
1、结构化数据:
特点:有固定的格式,如HTML,xml,json
2、非结构化的工具:
示例:图片,音频,视频,这类数据一半存储为二进制
以wb方式写入文件中
re模块使用流程
1、写法1
r_list=re.findall('正则',‘字符串’,re.S)
2、写法2
1、创建编译对象
p = re.compile('正则',re.S)
2、进行字符串匹配
r_list = p.findall(html)
3、常用的方法
1、match(s):字符串开头第一个,返回对象
2、search(s):从开始往后找,匹配第一个,返回对象
3、group()、从match和search中返回对象中取值
4、findall()、返回全部匹配,返回一个列表
4、元字符
. :匹配任意一个字符,不包括
d:匹配1个数字
s:空白字符
S:非空白字符#[sS]*匹配所有的字符
[] :包含 [] 内容 #A[BCD]E --> ABE ACE 或者ADE
w:普通字符
W:特殊字符
*:0次或多次
+:一次或多次
?:0次或一次
{m}:m次
{m,n}:m-->n次,AB[1,3]--->ABC ABBC ABBBC
5、贪婪模式和非贪婪模式
1、贪婪模式匹配
(.* ) 点星,在整个表达式匹配成功的前提下,尽可能多的去匹配
2、非贪婪模式
(.*?),在整个表达式匹配成功的前提下,尽可能少的去匹配
import re with open('./hei.html', 'r', encoding='utf-8') as f: file = f.read() p = re.compile('<script>(.*)</script>', re.S) #使用re.S参数以后,正则表达式会将这个字符串作为一个整体,将“ ”当做一个普通的字符加入到这个字符串中,在整体中进行匹配 r_list = p.findall(file) print(r_list)
正则表达式分组
import re #说明:先按照整体匹配出来,然后再匹配()中的内容 #如果有2个或者多个(),则以元组的方式去显示 s='A B C D' p1=re.compile('w+s+w+') print(p1.findall(s)) p2=re.compile('(w+)s+w+') print(p2.findall(s)) p3=re.compile('(w+)s+(w+)') print(p3.findall(s)) #w代表普通字符 s空白字符 +一次或多次 #第一步['AB','CD'] #第二步[('A','B'),('C','D')]
运行结果: ['A B', 'C D'] ['A', 'C'] [('A', 'B'), ('C', 'D')]