~~概述:
序号 |
代码 |
功能 |
|
1 |
. |
匹配任意1个字符(除了\n) |
2 |
[] |
匹配[]中列举的字符 |
3 |
\d |
匹配数字,即0-9 |
4 |
\D |
匹配非数字,即不是数字 |
5 |
\s |
匹配空白,即空格,tab键 |
6 |
\S |
匹配非空白 |
7 |
\w |
匹配非特殊字符,即a-z,A-Z,0-9,_,汉字 |
8 |
\W |
匹配特殊字符,即非字母,非数字,非_,非汉字 |
9 |
* |
匹配前一个字符出现0次或者无限次,即可有可无 |
10 |
+ |
匹配前一个字符出现1次或者无限次,即至少一次 |
11 |
? |
匹配前一个字符出现1次或者0次,即要么1次,要么没有 |
12 |
{m} |
匹配前一个字符出现m次 |
13 |
{m,n} |
匹配前一个字符出现从m到n次 |
14 |
^ |
匹配字符串开头 |
15 |
$ |
匹配字符串结尾 |
16 |
[^指定字符] |
匹配除了指定字符以外的所有字符 |
17 |
| |
匹配左右任意一个表达式 |
18 |
(ab) |
将括号中字符作为一个分组 |
19 |
\num |
引用分组num匹配到的字符串 |
20 |
(?P<name>) |
分组起别名 |
21 |
(?P=name) |
引用别名为name分组匹配到的字符串 |
~~举例分述:
序号 |
代码 |
功能 |
|
1 |
. |
匹配任意1个字符(除了\n) |
2 |
[] |
匹配[]中列举的字符 |
3 |
\d |
匹配数字,即0-9 |
4 |
\D |
匹配非数字,即不是数字 |
5 |
\s |
匹配空白,即空格,tab键 |
6 |
\S |
匹配非空白 |
7 |
\w |
匹配非特殊字符,即a-z,A-Z,0-9,_,汉字 |
8 |
\W |
匹配特殊字符,即非字母,非数字,非_,非汉字 |
代码1🌰:
import re
# . 匹配任意1个字符(除了\n)
# [] 匹配[]中列举的字符
# \d 匹配数字,即0-9
# \D 匹配非数字,即不是数字
# \s 匹配空白,即空格,tab键
# \S 匹配非空白
# \w 匹配非特殊字符,即a-z,A-Z,0-9,_,汉字
# \W 匹配特殊字符,即非字母,非数字,非_,非汉字
# . 匹配任意1个字符(除了\n)
# # 匹配数据
# result = re.match("itcast.", "itcast\n")
#
# # 获取数据
# if result:
# info = result.group()
# print(info)
# else:
# print("没有匹配到")
# [] 匹配[]中列举的字符
# # 匹配数据
# result = re.match("itcast[123abc]", "itcast9")
#
# # 获取数据
# if result:
# info = result.group()
# print(info)
# else:
# print("没有匹配到")
# \d 匹配数字,即0-9 => [0123456789] => [0-9]
# 匹配数据
# result = re.match("itcast[\d][\d]", "itcast10")
#
# # 获取数据
# if result:
# info = result.group()
# print(info)
# else:
# print("没有匹配到")
# \D 匹配非数字,即不是数字
# # 匹配数据
# result = re.match("itcast[\D]", "itcasta")
#
# # 获取数据
# if result:
# info = result.group()
# print(info)
# else:
# print("没有匹配到")
# \s 匹配空白,即空格,tab键
# # 匹配数据
# result = re.match("itcast\s111", "itcast\t111")
#
# # 获取数据
# if result:
# info = result.group()
# print(info)
# else:
# print("没有匹配到")
# \S 匹配非空白
# 匹配数据
# result = re.match("itcast\S111", "itcast*111")
#
# # 获取数据
# if result:
# info = result.group()
# print(info)
# else:
# print("没有匹配到")
# \w 匹配非特殊字符,即a-z,A-Z,0-9,_,汉字
# # 匹配数据
# result = re.match("itcast\w", "itcast_")
#
# # 获取数据
# if result:
# info = result.group()
# print(info)
# else:
# print("没有匹配到")
# \W 匹配特殊字符,即非字母,非数字,非_,非汉字
# 匹配数据
result = re.match("itcast\W", "itcast$")
# 获取数据
if result:
info = result.group()
print(info)
else:
print("没有匹配到")
二、匹配多个字符
序号 |
代码 |
功能 |
|
9 |
* |
匹配前一个字符出现0次或者无限次,即可有可无 |
10 |
+ |
匹配前一个字符出现1次或者无限次,即至少一次 |
11 |
? |
匹配前一个字符出现1次或者0次,即要么1次,要么没有 |
12 |
{m} |
匹配前一个字符出现m次 |
13 |
{m,n} |
匹配前一个字符出现从m到n次 |
代码2🌰:
import re
# * 匹配前一个字符出现0次或者无限次,即可有可无
# + 匹配前一个字符出现1次或者无限次,即至少一次
# ? 匹配前一个字符出现1次或者0次,即要么1次,要么没有
# {m} 匹配前一个字符出现m次
# {m,n} 匹配前一个字符出现从m到n次
# * 匹配前一个字符出现0次或者无限次,即可有可无
# 匹配数据
result = re.match("itcast\d*", "itcast123itcast")
# 获取数据
if result:
info = result.group()
print(info)
else:
print("没有匹配到")
# + 匹配前一个字符出现1次或者无限次,即至少一次
# # 匹配数据
result = re.match("itcast\d+", "itcast123itcast")
# 获取数据
if result:
info = result.group()
print(info)
else:
print("没有匹配到")
# ? 匹配前一个字符出现1次或者0次,即要么1次,要么没有
# 匹配数据
result = re.match("itcast\d?", "itcast123itcast")
# 获取数据
if result:
info = result.group()
print(info)
else:
print("没有匹配到")
# {m} 匹配前一个字符出现m次
# # 匹配数据
result = re.match("itcast\d{2}", "itcast123itcast")
# 获取数据
if result:
info = result.group()
print(info)
else:
print("没有匹配到")
# {m,n} 匹配前一个字符出现从m到n次
# 匹配数据
result = re.match("itcast\d{2,5}", "itcast123456itcast")
# 获取数据
if result:
info = result.group()
print(info)
else:
print("没有匹配到")
三、匹配开头和结尾
序号 |
代码 |
功能 |
|
14 |
^ |
匹配字符串开头 |
15 |
$ |
匹配字符串结尾 |
16 |
[^指定字符] |
匹配除了指定字符以外的所有字符 |
代码3🌰:
import re
# ^ 匹配字符串开头
# $ 匹配字符串结尾
# [^指定字符] 匹配除了指定字符以外的所有字符
# ^ 匹配字符串开头
# 匹配数据:以数字为开头的字符串
result = re.match("^\d.*", "2itcast")
# 获取数据
if result:
info = result.group()
print(info)
else:
print("没有匹配到")
# $ 匹配字符串结尾
# 匹配数据:以数字开头,以数字结尾
result = re.match("^\d.*\d$", "2itcast123itcast123")
# 获取数据
if result:
info = result.group()
print(info)
else:
print("没有匹配到")
# [^指定字符] 匹配除了指定字符以外的所有字符
# 匹配数据:匹配除了以a结尾的字符串
result = re.match("^\d.*[^t]$", "3itcast123itcasta")
# 获取数据
if result:
info = result.group()
print(info)
else:
print("没有匹配到")
四、匹配分组
序号 |
代码 |
功能 |
|
17 |
| |
匹配左右任意一个表达式 |
18 |
(ab) |
将括号中字符作为一个分组 |
19 |
\num |
引用分组num匹配到的字符串 |
20 |
(?P<name>) |
分组起别名 |
21 |
(?P=name) |
引用别名为name分组匹配到的字符串 |
代码4🌰
1、需求:在列表中["apple", "banana", "orange", "pear"],匹配apple和pear
fruit = ["apple", "banana", "orange", "pear"]
2、需求:匹配出163、126、qq等邮箱
3、需求:匹配qq:10567这样的数据,提取出来qq文字和qq号码
4、需求:匹配出<html>hh</html>
5、需求:匹配出<html><h1>www.itcast.cn</h1></html>
6、需求:匹配出<html><h1>www.itcast.cn</h1></html>
import re
# | 匹配左右任意一个表达式
# (ab) 将括号中字符作为一个分组
# \num 引用分组num匹配到的字符串
# (?P<name>) 分组起别名
# (?P=name) 引用别名为name分组匹配到的字符串
# 1、需求:在列表中["apple", "banana", "orange", "pear"],匹配apple和pear
fruit = ["apple", "banana", "orange", "pear"]
# 获取字符串数据
# | 匹配左右任意一个表达式
for value in fruit:
result = re.match("apple|pear", value)
# 判断匹配是否成功
if result:
info = result.group()
print("我想吃的水果:", value)
else:
print("这个不是我想吃的水果", value)
# 2、需求:匹配出163、126、qq等邮箱
# (ab) 将括号中字符作为一个分组
# \ 转义字符
result = re.match("[a-zA-Z0-9_]{4,20}@(163|126|qq)\.com", "hello@qq.com")
info = result.group()
print(info)
# 3、需求:匹配qq:10567这样的数据,提取出来qq文字和qq号码
# group(0)代表的是匹配的所有数据,group(1):第一个分组的数据,group(2):第二个分组的数据
# 顺序是从左到右依次排序的
result = re.match("(qq):([1-9]\d{4,11})", "qq:10657")
if result:
info = result.group()
print(info)
num = result.group(2)
print("qq号码:", num)
num = result.group(1)
print("type:", num)
else:
print("匹配失败")
# 4、需求:匹配出<html>hh</html>
# \num 引用分组num匹配到的字符串
result = re.match("<([a-zA-Z1-6]{4})>.*</\\1>", "<html>hh</html>")
if result:
info = result.group()
print(info)
else:
print("匹配失败")
# 5、需求:匹配出<html><h1>www.itcast.cn</h1></html>
result = re.match("<([a-zA-Z1-6]{4})><([a-zA-Z1-6]{2})>.*</\\2></\\1>", "<html><h1>www.itcast.cn</h1></html>")
if result:
info = result.group()
print(info)
else:
print("匹配失败")
# 6、需求:匹配出<html><h1>www.itcast.cn</h1></html>
# (?P<name>) 分组起别名
# (?P=name) 引用别名为name分组匹配到的字符串
result = re.match("<(?P<name1>[a-zA-Z1-6]{4})><(?P<name2>[a-zA-Z1-6]{2})>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h1></html>")
if result:
info = result.group()
print(info)
else:
print("匹配失败")