- 定义:re模块称为正则表达式;
- 作用:创建一个"规则表达式",用于验证和查找符合规则的文本,广泛用于各种搜索引擎、账户密码的验证等;
- 预定义字符
\d 匹配所有的十进制数字 0-9
\D 匹配所有的非数字,包含下划线
\s 匹配所有空白字符(空格、TAB等)
\S 匹配所有非空白字符,包含下划线
\w 匹配所有字母、汉字、数字 a-z A-Z 0-9
\W 匹配所有非字母、汉字、数字,包含下划线
1、$:匹配一行的结尾(必须放在正则表达式最后面)
2、^:匹配一行的开头(必须放在正则表达式最前面)
3、*:前面的字符可以出现0次或多次(0~无限)
4、+:前面的字符可以出现1次或多次(1~无限)
5、?:变"贪婪模式"为"勉强模式",前面的字符可以出现0次或1次
6、.:匹配除了换行符"\n"之外的任意单个字符
7、|:两项都进行匹配
8、[ ]:代表一个集合,有如下三种情况
[abc]:能匹配其中的单个字符
[a-z0-9]:能匹配指定范围的字符,可取反(在最前面加入^)
[2-9] [1-3]:能够做组合匹配
9、{ }:用于标记前面的字符出现的频率,有如下情况:
{n,m}:代表前面字符最少出现n次,最多出现m次
{n,}:代表前面字符最少出现n次,最多不受限制
{,m}:代表前面字符最多出现n次,最少不受限制
{n}:前面的字符必须出现n次
s = '我的电话是:10086,女朋友的电话是:10010'
#1、findall():所有结果都返回到一个列表中
ret1 = re.findall('\d+',s)
print(ret1)
#2、finditer():所有结果都返回到迭代器,取数据要用 .group()
ret2 = re.finditer('\d+',s) #<callable_iterator object at 0x0000024A0FAEB400>
print(ret2) #<callable_iterator object at 0x0000024A0FAEB400>
for i in ret2:
print(i.group())
#3、search():返回匹配到的第一个对象(object),对象可以调用group()返回结果
ret3 = re.search('\d+',s)
print(ret3.group())
#4、match():只在字符串开始匹配,也只返回一个对象,没有匹配到就返回 None
ret4 = re.match('\d+',s)
print(ret4)
#5、sub('规则','新字符','旧字符串'):替换
ret5 = re.sub('x.l','xxx','sdakofasldxwlfasfj')
print(ret5) #sdakofasldxxxfasfj
#6、compile():先把正则表达式编译成一个对象,提高效率,重复使用
res = """
<div class='jay'><span id='1'>周杰伦</span></div>
<div class='ldh'><span id='2'>刘德华</span></div>
<div class='zxy'><span id='3'>张学友</span></div>
<div class='hsbd'><span id='4'>胡说八道</span></div>
"""
obj = re.compile(r"<div class='.*?'><span id='\d+'>.*?</span></div>",re.S)
result = obj.finditer(res) #re.S 让 . 能匹配换行符
for i in result:
print(i.group())
#重点,分组
#(?P<分组名称>正则) 可以单独从正则匹配的内容中提取到XX名称的内容
obj1 = re.compile(r"<div class='(?P<yname>.*?)'><span id='(?P<id>\d+)'>(?P<name>.*?)</span></div>",re.S)
result1 = obj1.finditer(res)
for it in result1:
print(it.group('name'))