day10_python正则表达式

本文介绍了Python的re模块,讲解了如何匹配单个字符、多个字符,以及字符串的开头和结尾匹配,还涵盖了分组、search与findall的区别、sub函数的使用,以及贪婪和非贪婪模式。此外,解释了r字符串前缀的作用。
摘要由CSDN通过智能技术生成

匹配单个字符

在这里插入图片描述

# match 从开头匹配  在中间不行

# -------------------------------------------------------------
# 匹配单个字符

# 从后面的字符串中匹配 以 前面字符串开头的内容
result = re.match("tz", "tz-xuge")

# 匹配成功 用group来提取数据
print(result.group())  # tz

# . 匹配任意一个字符,除了 \n
ret = re.match("t.o", "two")
print(ret.group())  # two

# [] 匹配[]中列举的字符
# h H 开头都能匹配到
ret = re.match("[hH]", "hello")
print(ret.group())  # h
ret = re.match("[hH]", "Hello")
print(ret.group())  # H

# 匹配数字 0 1 2 3 4 6 7 8 9
ret = re.match("[0-46-9]", "3xuge")  # 3
print(ret.group())
ret = re.match("[0-46-9]", "5xuge")  # 匹配失败

# \d 匹配数字 0-9
ret = re.match("\d", "2aw")
print(ret.group())  # 2

# \D 匹配非数字
ret = re.match("\D", "a2w")
print(ret.group())  # a

# \s 匹配空白  空格,tab键,space
ret = re.match("\s", " a2w")
print(ret.group())  # 空格

# \S 匹配非空白
ret = re.match("\S", "a2w")
print(ret.group())  # a

# \w 匹配单词字符  a-z,A-Z,0-9,_(汉字)word
ret = re.match("\w", "a2w")
print(ret.group())  # a
ret = re.match("\w", "32w")
print(ret.group())  # 3
ret = re.match("\w", "A2w")
print(ret.group())  # A
ret = re.match("\w", "我2w")
print(ret.group())  # 我

# \W 匹配非单词字符
ret = re.match("\W", "  a2w")
print(ret.group())  # tab键

匹配多个字符

在这里插入图片描述

# * 0次或多次
ret = re.match("[A-Z][a-z]*", "MnnwwM")
print(ret.group())  # Mnnww

ret = re.match("[A-Z][a-z]*", "M")
print(ret.group())  # M

# + 1次或多次
ret = re.match("[A-Z][a-z]+", "MnnwwM")
print(ret.group())  # Mnnww

ret = re.match("[A-Z][a-z]+", "M")
# print(ret.group()) # 报错

# ? 0次或1次
ret = re.match("[A-Z][a-z]?", "MnnwwM")
print(ret.group())  # Mn

ret = re.match("[A-Z][a-z]?", "M")
print(ret.group())  # M

# {m} m次
ret = re.match("[A-Z][a-z]{2}", "MnnwwM")
print(ret.group())  # Mnn

ret = re.match("[A-Z][a-z]{4}", "MnnwwM")
print(ret.group())  # Mnnww

# {m,n} m-n次
ret = re.match("[A-Z][a-z]{2,9}", "MnnwwM")
print(ret.group())  # Mnnww

匹配字符串开头结尾

在这里插入图片描述
在这里插入图片描述

# ^ 匹配字符串开头
ret = re.match("^123456", "123456")
print(ret.group())  # 1

# $ 匹配字符串结尾

ret = re.match("[\w]{4,20}@163.com$", "320084@163.com")
print(ret.group())  # 320084@163.com

ret = re.match("[\w]{4,20}@163.com$", "320084@163.com1")
# print(ret.group()) # 报错

匹配分组

在这里插入图片描述

# | 匹配左右任意分组
# | 前匹配0-99  | 后匹配100
ret = re.match("[0-9]?\d$|100", "100")
print(ret.group())  # 100

# (abc) 括号里为一个分组,group()从 1 开始
ret = re.match("([\d]{4,20}@)(qq|163|gmail)\.com", "320084@qq.com")
print(ret.group())  # 320084@qq.com
print(ret.group(1))  # 320084@
print(ret.group(2))  # qq

# \num  引用分组num匹配的字符串
ret = re.match(r"<(\w*)>[\d]{1,20}</\1>", "<html>128963421</html>")
print(ret.group())  # <html>128963421</html>

# 给分组起别名 经常用在html中,见下图
# (?P<name>) 分组起别名
# (?P=name) 引用别名为name匹配的字符串

在这里插入图片描述

search 和 findall用法及区别

# search  不用从开头开始比较,找到第一个满足匹配要求的

ret = re.search(r"\d+", "999 nihao 999")
print(ret.group())  # 999

# findall  不用从开头开始比较,找到所有满足匹配要求的
# 注意打印方法 返回的是一个列表
ret = re.findall(r"\d+", "999 nihao 999")
print(ret[0])  # 999
print(ret[1])  # 999

sub用法

# sub (匹配规则,要替换的新内容,从哪找符合匹配规则的字符串,并进行替换)
ret = re.sub(r"\d+", '996', '我是007')
print(ret)

split用法

# split 根据规则进行字符串切割,并且返回一个列表
ret = re.split(r' |:', "info:zuo shini bb 123")
print(ret)

贪婪模式与非贪婪模式

# 注: 只有 出现+ * 等多个匹配时 才会出现贪婪匹配模式
# 贪婪匹配 不加?
ret = re.match("(\d*)([\w]*)([0-9]*)$", "234hello234")
print(ret.group(2))  # hello234

# 非贪婪 加?
ret = re.match("(\d*)([\w]*?)([0-9]*)$", "234hello234")
print(ret.group(2))  # hello

r 的作用—仅仅是让 \ 失去转义的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值