正则表达式
一、数据分类
1、结构化数据
特点:有固定的的格式,如:HTML, XML, JSON
2、非结构化数据
示例 :图片、音频、视频,这类数据一般都存储为二进制
二、正则表达式
1、使用流程
1、创建编译对象 :p = re.compile("正则表达式")
2、对字符串匹配 :r = p.match("字符串")
3、获取匹配结果 :print(r.group())
2、常用方法
1、match(s) :字符串开头的第1个,返回对象
2、search(s):从开始往后找,匹配第1个,返回对象
3、group() :从match或search返回对象中取值
4、findall():所有全部匹配,返回一个列表
3、表达式
. 匹配任意字符(不能匹配\n)
\d 数字
\s 空白字符
\S 非空白字符
[...] 包含[]内容 :A[BCD]E --> ABE ACE ADE
\w 字母、数字、_
* 0次或多次
? 0次或1次
+ 1次或多次
{m} m次
{m,n} m-n次 AB{1,3}C --> ABC ABBC ABBBC
4、示例(贪婪模式和非贪婪模式)
贪婪匹配(.*) :在整个表达式匹配成功的前提下,尽可能多的匹配*
非贪婪匹配(.*?) :在整个表达式匹配成功的前提下,尽可能少的匹配*
5、findall()的分组
import re
#解释 :先按照整体匹配出来,然后再匹配()中的
# 如果有2个或者多个(),则以元组的方式取显示
s = "A B C D"
p1 = re.compile('\w+\s+\w+')
print(p1.findall(s))
# ['A B','C D']
p2 = re.compile('(\w+)\s+\w+')
# 第1步 :['A B','C D']
# 第2步 :['A','C']
print(p2.findall(s))
p3 = re.compile('(\w+)\s+(\w+)')
# 第1步 :['A B','C D']
# 第2步 :[('A','B'),('C','D')]
print(p3.findall(s))
6、练习
<div class="animal">
<p class="name">
<a title="Rabbit"></a>
</p>
<p class="contents">
Small white rabbit white and white
</p>
</div>
p = re.compile('<div class="animal".*?title="(.*?)">.*?contents">(.*?)</p>',re.S)
Python3 re.search()方法
re.search()方法扫描整个字符串,并返回第一个成功的匹配。如果匹配失败,则返回None。
与re.match()方法不同,re.match()方法要求必须从字符串的开头进行匹配,如果字符串的开头不匹配,整个匹配就失败了;
re.search()并不要求必须从字符串的开头进行匹配,也就是说,正则表达式可以是字符串的一部分。
re.search(pattern, string, flags=0)
- pattern : 正则中的模式字符串。
- string : 要被查找替换的原始字符串。
- flags : 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
例如:
content = res.text
result = re.search('img', content)
print(result)
# result
<re.Match object; span=(472, 475), match='img'>

浙公网安备 33010602011771号