正则表达式
# 导入re 模块
import re
# 2. 使用match方法进行匹配操作
result = re.match(表达式, 字符串 )
# 如果匹配不到 返回None, 匹配到, 返回Match对象
print(result)
# 如果上一个步匹配到数据的话, 可以使用group 方法提取数据
print(result.group())
匹配单个字符
import re
# 匹配 任意字符 (除了\n)
ret = re.match("t.o", "too")
print(ret.group()) # too
ret = re.match("t.o", "two")
print(ret.group()) # two
# 匹配 [ ] 中列举的字符
ret = re.match("[hH]", "hello Python")
print(ret.group()) # h
ret = re.match("[hH]ello Python", "hello Python")
print(ret.group()) # hello Python
# 匹配 \d 数字 即 0-9
# 匹配 \D 匹配 非数字 , 即不是数字
# 匹配 \s 匹配空白, 及空格 , tab键
# 匹配 \S 匹配 非空白
# 匹配 \w 匹配 单词字符 即 a-z. A-Z, 0-9
# 匹配 \W 匹配 非单词字符
匹配多个字符
# 字符 * 匹配前一个字符出现0次或者无限次, 即可有可无
# 字符 + 匹配前一个字符出现1次或者无限次, 即至少有一次
#字符 ? 匹配前一个字符出现0次或者1次, 即要么有1次, 要么没有
# 字符 {m} 匹配前一个字符出现m次,
#字符 {m,n} 匹配前一个字符出现m次到n次,
# 开头 ^ 结尾 $
email_list =["xiaoWang@163.com","xiaoWang@163.comheihei", ".com.xiaowang@qq.com"]
for email in email_list:
ret = re.match("[\w]{4,20}@163\.com$", email)
if ret:
print("%s 是符合规定的邮件地址,匹配后的结果是:%s" % (email, ret.group()))
else:
print("%s 不符合要求" % email)
# match 默认以 以开头匹配 所以不用加 ^
匹配分组
import re
# 字符 | 匹配左右 两侧 一个
ret = re.match("[1-9]?\d$|100", "100")
if ret:
pritn(ret.group())
# 字符 (a|b) 匹配小括号
ret = re.match("\w[4,20]@(163|126|qq)\.com$", "test@qq.com")
if ret:
pritn(ret.group())
# 正则转义 加r 进行转义
ret = re.match(r"\w[4,20]@(163|126|qq)\.com$", "test@qq.com")
if ret:
pritn(ret.group())
# 通过引用分组中匹配到的数据即可,但是要注意是元字符串,即类似 r""这种格式
# </\1> == ([a-zA-Z]*)
ret = re.match(r"<([a-zA-Z]*)>\w*</\1>", "<html>hh</html>")
print(ret.group())
import re
ret = re.match(r"<(P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.itcast.cn</h1></html>")
# 起了个别名
# (?P<name>\w*) 给\w*匹配的内容 起了个别名 name
print(ret.group())
print(ret.group('name1')) # 获取name1的匹配结果
print(ret.group('name2')) # 获取name2的匹配结果
# 打印结果
# html
# h1
高级用法
# search
import re
ret = re.search(r"\d+", "阅读次数为9999还是9998?")
print(ret.group()) # 9999
# search 在整个字符中搜索 返回匹配的第一个
# match 和search 不同在 match 默认是匹配开头
# findall
ret = re.findall(r"\d+", "python = 9999, c=7899, c++ = 3456")
print(ret) # 返回 的是一个列表
# sub
import re ret = re.sub(r"\d+", '998', "python = 997") print(ret) # Python = 998
# 参1 规则
# 参2 替换的字符串
# 参数3 原字符串
# 参数4 匹配个数
# 进行 加1
# 设置 函数
def add(match):
# 1 获取匹配的 数据 返回的是 match 对象
num = match.group()
# 数据 + 1 进行强转
num = int(num) + 1
# 返回的也是字符串
return str(num)
ret = re.sub(r"\d+", add, "python = 997")
print(ret) # Python = 998
# 取 反 ^ 语法: [^规则]
# 贪婪模式
s = "this is a number 234-235-22-123"
ret = re.match(r"(.+)(\d+-\d+-\d+-\d+))
print(ret.group())
# 非贪婪模式 +?
ret = re.match(r"(.+?)(\d+-\d+-\d+-\d+))
print(ret.group())
print(ret.group(1)) # this is a number
print(ret.group(2)) # 234-235-22-123