文章目录
1、正则表达式的概念
正则表达式:又称规则表达式(英语:Regular Expression.在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式的文本。
2、匹配单个字符
字符 | 功能 |
---|---|
. | 匹配任意一个字符(除了\n) |
[ ] | 匹配[ ]中列举的字符 |
\d | 匹配数字,即 0-9 |
\D | 匹配非数字 |
\s | 匹配空白,即空格,\t ,\n |
\S | 匹配非空白 |
\w | 匹配单词字符即a-z、A-Z、0-9、_ |
\W | 匹配非单词字符 |
3、匹配多个字符
字符 | 功能 |
---|---|
* | 匹配前一个字符出现0次或者无限次,即可有可无 |
+ | 匹配前一个字符出现1次或者无限次,即至少一次 |
? | 匹配前一个字符出现1次或者0次,即要么只有一次,要么没有 |
{m} | 匹配前一个字符出现m次 |
{m,n} | 匹配前一个字符出现m到n次 |
4、匹配开头和结尾
字符 | 功能 |
---|---|
^ | 匹配字符串开头, ^[ab]表示以a或b开头 ,[^ab]匹配不是a和b的字符 |
$ | 匹配字符串结尾 |
5、re模块的使用
'''
1、导入模块
2、通过match方法,验证正则
3、判断 验证是否成功
4、如果成功,获取匹配的结果
'''
# 1、导入模块
'''
1、导入模块
2、通过match方法,验证正则
3、判断 验证是否成功
4、如果成功,获取匹配的结果
'''
# 1、导入模块
import re
# 2、通过match方法,验证正则
#re.match("正则表达式","要验证/检测字符串")
#match()方法如果匹配成功,返回mactch object对象
#match()方法如果匹配失败,返回None
result=re.match("\w{4,20}@(163|126|qq)\.com$","hello@qq.com")
# 3、判断 验证是否成功
if result:
# 4、如果成功,获取匹配的结果
print("匹配成功")
#获取匹配的具体内容
print(result.group())
else:
print("匹配失败")
#结果
匹配成功
hello@163.com
6、 匹配分组
6.1、| 和 ( )的应用
字符 | 功能 |
---|---|
| | 匹配左右任意一个表达式 |
(ab) | 将括号中字符作为一个整体进行匹配 |
\num | 引用分组num匹配到的字符串 |
(?P<name>) | 分组起别名 |
(?P=name) | 引用别名为name分组匹配到的字符串 |
'''
1、导入模块
2、通过match方法,验证正则
3、判断 验证是否成功
4、如果成功,获取匹配的结果
'''
# 1、导入模块
import re
# 2、通过match方法,验证正则
#re.match("正则表达式","要验证/检测字符串")
#match()方法如果匹配成功,返回mactch object对象
#match()方法如果匹配失败,返回None
result=re.match("\w{4,20}@(163|126|qq)\.com$","hello@163.com")
# 3、判断 验证是否成功
if result:
# 4、如果成功,获取匹配的结果
print("匹配成功")
#获取匹配的具体内容
print(result.group())
#提取子字符串
#获取第一个括号中的内容:result.group(1)
#获取第二个括号中的内容:result.group(2)...
print(result.group(1))
else:
print("匹配失败")
#结果
匹配成功
hello@163.com
163
6.2 \的应用
'''
1、导入模块
2、通过match方法,验证正则
3、判断 验证是否成功
4、如果成功,获取匹配的结果
'''
'''
1、导入模块
2、通过match方法,验证正则
3、判断 验证是否成功
4、如果成功,获取匹配的结果
'''
# 1、导入模块
import re
# 2、通过match方法,验证正则
#re.match("正则表达式","要验证/检测字符串")
#match()方法如果匹配成功,返回mactch object对象
#match()方法如果匹配失败,返回None
result=re.match("<([0-9a-zA-Z]+)><([0-9a-zA-Z]+)>.*</\\2></\\1>","<html><h1>123</h1></html>")
# 3、判断 验证是否成功
if result:
# 4、如果成功,获取匹配的结果
print("匹配成功")
#获取匹配的具体内容
print(result.group())
print(result.group(1))
print(result.group(2))
else:
print("匹配失败")
#结果
匹配成功
<html><h1>123</h1></html>
html
h1
6.3起别名和别名的引用
result=re.match("<(?P<name1>[0-9a-zA-Z]+)><(?P<name2>[0-9a-zA-Z]+)>.*</(?P=name2)></(?P=name1)>","<html><h1>123</h1></html>")
7、re模块的高级用法
7.1、搜索匹配
re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None
格式:re.serach(pattern,string,flags=0)
需求:查找阅读次数
#导入模块
import re
#通过search方法,验证正则
#match从需要检测的字符串的开头开始匹配
#search从需要检测的字符串中搜索满足条件的子字符串
result=re.search("\d+" ,"阅读次数:9999")
#判断验证是否成功
if result:
print("匹配成功")
print(result.group())
else:
print("匹配失败")
#结果
匹配成功
9999
7.2、findall,查找所有,返回列表
re.findall遍历匹配,可以获取字符串中所以匹配的字符串,返回一个列表
格式:re.findall(pattern,string,flags=0)
需求:统计出阅读次数,转发次数和评论次数
#导入模块
import re
#findall搜索全部,返回值是一个列表
result=re.findall("\d+" ,"阅读次数:9999,转发次数:888,转发次数:123")
#判断验证是否成功
if result:
print("匹配成功")
print(result)
else:
print("匹配失败")
#结果
匹配成功
['9999', '888', '123']
7.3、sub字符串替换
sub(”正则表达式“,"替换后的内容”,"被替换的内容”)字符串替换(按照正则,查找字符串并且替换为指定的内容),返回值是替换后的字符串。
#导入模块
import re
#findall搜索全部,返回值是一个列表
result=re.sub("\d+","77" ,"阅读次数:9999,转发次数:888,转发次数:123")
#判断验证是否成功
if result:
print("匹配成功")
print(result)
else:
print("匹配失败")
#结果
匹配成功
阅读次数:77,转发次数:77,转发次数:77
7.3、split拆分字符串
split (“正则表达式”,“待拆分的字符串”) 按照正则拆分字符串,返回值是一个列表
#导入模块
import re
result=re.split(":| ","info:hello@163.com zhangsan lisi")
#判断验证是否成功
if result:
print("匹配成功")
print(result)
else:
print("匹配失败")
#结果
匹配成功
['info', 'hello@163.com', 'zhangsan', 'lisi']