一、正则表达式
1、学习目标2、正则表达式的概述3、正则表达式的匹配单字符4、正则表达式匹配多字符5、正则表达式匹配开头,结尾6、re模块操作7、匹配分组"|"8、匹配分组"()"9、匹配分组之""
9.1、引用-" "9.2、引用的别名 10、re模块的高级用法(*)
10.1、search-搜索匹配10.2、findall-查找所有,返回列表10.3、sub-字符串替换10.4、split-分割
一、正则表达式 1、学习目标 2、正则表达式的概述3、正则表达式的匹配单字符 4、正则表达式匹配多字符 5、正则表达式匹配开头,结尾正则表达式(Regular expression,在代码中常写为regex或RE),经常被用来检索,替换那些符合某个模式的文本
6、re模块操作^:开头
$:结尾
目标
1、知道re.match方法的作用
2、知道group方法的作用
re模块的使用过程
re.match(pattern,string,flags=0) pattern:正则模式 string:要匹配的字符串 flags:匹配模式
match()方法一旦匹配成功,就是一个match object对象,而match object对象有以下方法:
group()返回被RE匹配的字符串
start()返回匹配开始的位置
end()返回匹配结束的位置
span()返回一个元组包含匹配(开始,结束)的位置
实现代码如下:
#导入模块
import re
#使用match方法,进行检测
result=re.match("w{5,15}@163.com$","hello@163.com")
if result:
#用对象.group()取内容
print("匹配成功,匹配结果是:",result.group())
else:
print("匹配失败")
结果为:
匹配成功,匹配结果是: hello@163.com
7、匹配分组"|"
目标
这里的|就是或者的意思
import re
result=re.match("^[0-9]?[0-9]$|100","100")
if result:
print("匹配成功,匹配结果是:",result.group())
else:
print("匹配失败")
结果为:
匹配成功,匹配结果是: 100
8、匹配分组"()"
1、当做一个集合
import re
result=re.match("w{4,15}@(163|126|sina|qq).com$","hello@qq.com")
if result:
print("匹配成功,匹配结果是:",result.group())
else:
print("匹配失败")
结果为:
匹配成功,匹配结果是: hello@qq.com
2、可以提取子字符串,每一对()都有一个编号,从1开始
import re
result=re.match("w{4,15}@(163|126|sina|qq).com$","hello@qq.com")
if result:
print("匹配成功,匹配结果是:",result.group())
print("提取子字符串结果是:",result.group(1))
else:
print("匹配失败")
结果为:
匹配成功,匹配结果是: hello@qq.com
提取子字符串结果是: qq
案例:提取区号和电话号码
import re
result=re.match("(d{3,4})-(d{7,8})","010-12345678")
if result:
print("匹配成功,匹配结果是:",result.group())
print("提取区号:",result.group(1))
print("提取电话号码:",result.group(2))
else:
print("匹配失败")
结果为:
目标
9.1、引用-" "知道(?P< name>)可以给分组取别名
这里的就表示引用的意思,1,就和第一组的内容要一样
案例:要匹配< html >…< /html >
import re
result=re.match("<([a-zA-Z0-9]+)>.+\1>","test")
if result:
print("匹配成功,匹配结果是:",result.group())
else:
print("匹配失败")
结果为:
匹配成功,匹配结果是: test
注意:
9.2、引用的别名在python中,有特殊用法,表示转义,所以我们在引用的时候,得再加把转义过来即可
给分组起别名
import re
result=re.match("<(?P[a-zA-Z0-9]+)><(?P[a-zA-Z0-9]+)>.+(?P=name2)>(?P=name1)>","test")
if result:
print("匹配成功,匹配结果是:",result.group())
print("匹配成功,匹配结果是:",result.group(1))
print("匹配成功,匹配结果是:",result.group(2))
else:
print("匹配失败")
结果为:
匹配成功,匹配结果是: test
匹配成功,匹配结果是: html
匹配成功,匹配结果是: h1
10、re模块的高级用法(*)
目标
10.1、search-搜索匹配1、知道re模块search方法的作用
2、知道re模块sub方法的作用
3、知道re模块split方法的作用
4、知道re模块findall方法的作用
re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果没有匹配,则返回None。和上面的re.match比较相像
import re
result=re.search("hello","cxwehellooc")
if result:
print("匹配成功,匹配结果是:",result.group())
else:
print("匹配失败")
结果为:
匹配成功,匹配结果是: hello
match和search有什么区别呢?
10.2、findall-查找所有,返回列表match是从字符串开始的位置进行检测的,如果要检测的数据不处于字符串的开始位置就会匹配失败;
search是从整个字符串中搜索,对位置没有要求
import re
result=re.findall("d+","阅读次数:999,转发次数:666,评论次数:555")
if result:
print("匹配成功,匹配结果是:",result)
else:
print("匹配失败")
结果为:
匹配成功,匹配结果是: ['999', '666', '555']
10.3、sub-字符串替换
用法:
sub("正则表达式","新的内容","要替换的字符串")
实现代码:
result=re.sub("d+","1000","阅读次数:999,转发次数:666,评论次数:555")
if result:
print("匹配成功,匹配结果是:",result)
else:
print("匹配失败")
结果为:
匹配成功,匹配结果是: 阅读次数:1000,转发次数:1000,评论次数:1000
10.4、split-分割
用法:
split(“正则表达式”,"待拆分的字符串"),返回值是一个列表
实现代码如下:
import re
result=re.split(":| ","info:hello@163.com zhangsan lisi")
if result:
print("匹配成功,匹配结果是:",result)
else:
print("匹配失败")
结果为:
匹配成功,匹配结果是: ['info', 'hello@163.com', 'zhangsan', 'lisi']



