1.re.findall(pattern, string):会按照给定的匹配模式在整个字符串中进行匹配,并将结果以列表形式返回。
# \d+匹配数字且1次或很多次
lis = re.findall(f"\d+","我的电话号码是:10086,我女朋友的电话是:10010")
print(type(lis),lis)
# 结果:<class 'list'> ['10086', '10010']
2.re.finditer: 匹配字符串中所有的内容[返回的是迭代器] 从迭代器中拿到内容需要.group()
it = re.finditer(r"\d+","我的电话号码是:10086,我女朋友的电话是:10010")
print(it)
for i in it:
print(i.group())
# 结果:<callable_iterator object at 0x000001A4E8AF13D0>
# 结果:10086
# 结果:10010
3.re.search:返回的结果是match对象,找到一个结果就返回,拿数据需要.group()
s = re.search(r"\d+","我的电话号码是:10086,我女朋友的电话是:10010")
print(type(s))
print(s)
print(s.group())
# 结果:<class 're.Match'>
# 结果:<re.Match object; span=(8, 13), match='10086'>
# 结果:10086
4.re.compile:预加载正则表达式
# 先设置匹配模式,生成正则对象实列obj,然后通过其进行obj.finditer进行正则匹配,返回的结果是迭代器,通过.group()提取值。
obj = re.compile(r"\d+")
ret = obj.finditer("我的电话号码是:10086,我女朋友的电话是:10010")
for x in ret:
print(x.group())
print(ret)
# 结果:10086
# 结果:10010
# 结果:<callable_iterator object at 0x0000027DE0301250>
s = """
<div class='jay'><span id='1'>郭麒麟</span></div>
<div class='jj'><span id='2'>宋铁</span></div>
<div class='jolin'><span id='3'>大聪明</span></div>
<div class='sylar'><span id='4'>范思哲</span></div>
<div class='tory'><span id='5'>胡说八道</span></div>
"""
# (?P<分组名字>正则) 可以单独从正则匹配的内容中进一步提取内容
# .*?代表惰性匹配,尽可能的多的少匹配 .*代表贪婪匹配,就是匹配除换行符的其他字符不限次
# (?P<id>\d+)匹配的数字设置分组名id
# (?P<wahaha>.*?)匹配的数字设置分组名wahaha
obj = re.compile(r"<div class='.*?'><span id='(?P<id>\d+)'>(?P<wahaha>.*?)</span></div>",re.S)
result = obj.finditer(s)
for it in result:
print(it.group("wahaha"))
print(it.group("id"))
break
# 结果:郭麒麟
# 结果:1