匹配单个字符
导入re包
import re
res = re.match(r"速度与激情[1-8]", "速度与激情1").group()
res = re.match(r"速度与激情[1-36-8a-e]", "速度与激情1").group() # 匹配的数据中间断档
res = re.match(r"速度与激情\w", "速度与激情1").group() # 匹配的数据中间断档
通过re包里的match来匹配
re.match(正则表达式的范围, 需要匹配的字符串)
通过group方法可以查询当前匹配的值
演示代码中[1-36-8a-e]:[1-3]+[6-8]+[a-e]的合集
\d 数字
\s 空格
\w [0-9][a-z][A-Z]
匹配多个字符
result = re.match(r"速度与激情\d{1,2}", "速度与激情12").group()
re.match(r"021-\d{8}", "021-12131231")
re.match(r"021-?\d{8}", "021-12131231")
re.match(r"021-?\d{8}", "02112131231")
通过{}来控制匹配的范围
演示代码中?:前一个字符可以出现一次或者不出现
html_str = """<body><h1>hhhhhh</h1></body>"""
# 通过()来组成一个组合
# 当组合很多的时候可以通过:?P<p1>来命名,?P=名称调用(这里的P是大写的)
# 一般是用/1、/2就可以了
res = re.match(r"<(?P<p2>\w*)><(?P<p1>\w*)>\w+</(?P=p1)></(?P=p2)>", html_str).group()
# print(res)
# search方法 返回第一次匹配到的值
res1 = re.search(r"\d+", "阅读书9999,点赞数1111").group()
# print(res1)
# findall统计所有的匹配结果,返回一个链表
res1 = re.findall(r"\d+", "阅读书9999,点赞数1111")
# print(res1)
# sub将匹配到的数据进行全部替换
# 并且支持将方法调用
re.sub("\d+", "998", "python=1000")
综合演练
def main():
email = input("请输入一个邮箱地址")
result = re.match(r"[a-zA-Z0-9]{4,20}@(163|126|qq)\.com$", email)
if result:
print("符合要求%s" %email)
else:
print("不符合要求%s" %email)
if __name__ == '__main__':
main()
html_str = """<body><h1>hhhhhh</h1></body>"""
# 一般是用/1、/2就可以了
res = re.match(r"<(?P<p2>\w*)><(?P<p1>\w*)>\w+</(?P=p1)></(?P=p2)>", html_str).group()
# print(res)
在演示代码中$引用是为了保证字符串是可以以什么结尾
[a-zA-Z0-9]{4,20}@(163|126|qq)\.com$:这个正则当中可以这样理解
[a-zA-Z0-9]{4,20}:匹配a-z或者A-Z或者0-9的字符出现4-20个
@:匹配邮箱的@符号
(163|126|qq):因为邮箱可以有很多种作为一个组合用括号引用,拥|表示或的关系
\.:因为在正则表达式中.可以匹配很多数据(除了\n),通过\.转义
com$:匹配以.com结尾
综上所述组合起来就是一个简单的邮箱正则表达式