笔记本📒

python-正则

2021-01-27  本文已影响0人  涓涓自然卷

~~概述:

序号 代码 功能
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("匹配失败")

上一篇下一篇

猜你喜欢

热点阅读