爬虫课程笔记02_迭代器

 1、re正则解析:开源中国的正则测试学习

菜鸟课程的正则:​​https://www.runoob.com/regexp/regexp-syntax.html​

爬虫课程笔记02_迭代器_02

爬虫课程笔记02_预加载_03

 

爬虫课程笔记02_正则_04

爬虫课程笔记02_正则_05

 1、re模块在python中的使用

# 导入正则模块
import re

 

1)findall()查找所有,返回list

# findall:匹配字符串中所有的符合正则的内容
lst = re.findall(r'\d+','我的电话是:10086,我女朋友的电话是:10010')
print(lst) # -->['10086', '10010']

2)search()会进行匹配,但是如果匹配到了第一个结果,就会返回这个结果,如果匹配不上search返回的则是None

# search:找到一个结果就返回,返回的结果是match对象,拿数据需要.group()
s = re.search(r'\d+','我的电话是:10086,我女朋友的电话是:10010')
print(s) # --> <re.Match object; span=(6, 11), match='10086'>
print(s.group()) # -->10086

3)match()只能从字符串的开头进行匹配

# match从头开始匹配,与search的不同是search从全文中匹配
# m = re.match(r'\d+','我的电话是:10087,我女朋友的电话是:10010')
m = re.match(r'\d+','10087,我女朋友的电话是:10010')
print(m.group()) # AttributeError: 'NoneType' object has no attribute 'group'

4)finditer(),和findall差不多,只不过这时候返回的是迭代器(重点)

# finditer:匹配字符串中所有的内容,返回的是迭代器,从迭代器中拿到内容需要使用.group()
it = re.finditer(r'\d+','我的电话是:10086,我女朋友的电话是:10010')
# print(it) # --><callable_iterator object at 0x000001C7FB2D2E50>
for i in it:
# print(i) # --><re.Match object; span=(6, 11), match='10086'> <re.Match object; span=(21, 26), match='10010'>
print(i.group()) # --> 10086 10010

5)compile()可以将一个长长的正则进行预加载,方便后面的使用

# 预加载正则表达:compile()可以将一个长长的正则进行预加载,方便后面的使用
obj = re.compile(r"\d+")

ret = obj.finditer("我的电话是:10086,我女朋友的电话是:10010")
print(ret) # --><callable_iterator object at 0x00000138F5DE2DC0>
for it in ret:
print(it.group()) # -->10086 10010

6)正则中的内容如何单独提取?单独获取到正则中的具体内容可以给分组起名字