my_generator = (i for i in range(10))
print(type(my_generator)) # <class 'generator'>
通俗来讲:其实就是与列表推导式,集合推导式类似的元组推导式,不过一般来讲,没有元组推导式这个概念
2.1.2 yield关键字
只要在 def 函数里面看到有 yield 关键字那么就是生成器
复制代码
#1. 定义函数,存储到生成器中,并返回
def my_generator():
#1.1 循环
for i in range(1,11):
#1.2 使用yield关键字创建生成器
#yield在这里做了三件事:1.创建生成器对象 2.把值存储到生成器中 3.返回生成器
yield i
#2. 调用函数,获取生成器对象
gen = my_generator()
print(type(gen)) # <class 'generator'>
for i in gen:
print(i)
if result:
print(result.group())
else:
print("匹配失败")
相关代码如下:
复制代码
import re
s1 = '18809090000是我的手机号,你记住了吗?我的另一个手机号是18800008888,两个QQ号分别是155998992 和 18809091293821,你记住了吗?'
result = re.match(r"1[3-9]\d{9}",s2)
#match--从字符串的开头开始匹配(只会匹配第一个匹配项),返回 match对象/None
if result:
print(result.group()) #获取到匹配的结果
print(result.span()) #匹配项的索引
print(result.start()) #匹配项的开始索引
print(result.end()) #匹配项的结束索引
else:
print("匹配失败")
4.2.2 字符串search匹配
1.导入模块
复制代码
import re
2.正则表达式与要检验的字符串进行匹配(从任意位置)
复制代码
result = re.search("正则表达式", "要校验的字符串")
3.获取匹配结果
复制代码
if result:
print(result.group())
else:
print("匹配失败")
相关代码如下:
复制代码
import re
s2 = '我的手机号是18809090000,你记住了吗?我的另一个手机号是18800008888,两个QQ号分别是155998992 和 18809091293821,你记住了吗?'
#search--从字符串的任意位置开始匹配(只会匹配第一个匹配项),返回match对象
result = re.search(r"1[3-9]\d{9}",s2)
if result:
print(result.group()) #获取到匹配的结果
print(result.span()) #匹配项的索引
print(result.start()) #匹配项的开始索引
print(result.end()) #匹配项的结束索引
else:
print("匹配失败")
4.2.3 字符串findall匹配
1.导入模块
复制代码
import re
2.正则表达式与要检验的字符串进行匹配
复制代码
result = re.findall("正则表达式", "要校验的字符串")
3.获取匹配结果
复制代码
print(result)
相关代码如下:
复制代码
import re
s2 = '我的手机号是18809090000,你记住了吗?我的另一个手机号是18800008888,两个QQ号分别是155998992 和 18809091293821,你记住了吗?'
#findall--返回所有匹配项的列表,返回列表
result = re.findall(r"1[3-9]\d{9}","s2")
print(result)
4.2.4 字符串compile + sub替换
1.导入模块
复制代码
import re
2.正则表达式与要检验的字符串进行匹配
复制代码
result = re.compile("正则表达式") #返回正则表达式对象
result = result.sub("替换后的内容", "要被匹配和替换的字符串")
3.获取替换结果
复制代码
print(result)
新版API写法:
复制代码
result = re.sub("正则表达式", 替换后的内容, 要被匹配和替换的字符串)
4.3 正则表达式案例
案例1:匹配 qq:195737 这样的数据,从中提取 "qq" 和 qq号码
复制代码
import re
qq_number = "qq:1319831324"
result = re.match(r"(qq):(\d+)", qq_number)
print(result.group(1,2) if result else "匹配失败")
#结果:('qq', '1319831324')
案例2:校验 html 标签
复制代码
import re
"""
<html>
<head><title>示例标题</title></head>
</html>
"""
html_s = "<html><head><title>示例标题</title></head></html>"
#方式1:最传统方式
result = re.match(r"<[a-z|A-Z]{1,5}><[a-z|A-Z]{1,5}><[a-z|A-Z]{1,5}>.*</[a-z|A-Z]{1,5}></[a-z|A-Z]{1,5}></[a-z|A-Z]{1,5}>", html_s)
print(result.group() if result else "匹配失败")
#方式2:使用反向引用
result = re.match(r"<([a-z|A-Z]{1,5})><([a-z|A-Z]{1,5})><([a-z|A-Z]{1,5})>.*</\3></\2></\1>", html_s)
print(result.group() if result else "匹配失败")
#方式3:使用反向引用,同时给引用命名
result = re.match(r"<(?P<first>[a-z|A-Z]{1,5})><(?P<second>[a-z|A-Z]{1,5})><(?P<third>[a-z|A-Z]{1,5})>.*</(?P=third)></(?P=second)></(?P=first)>", html_s)
print(result.group() if result else "匹配失败")