re模块
re模块
正则表达式
正则表达式是一门独立的,任何语言都可以使用正则表达式,是由一堆特殊的字符组合而来
-
字符组:
[0-9] :匹配0-9之间的任意字符
[9-0] : 报错, 必须从小到大
[a-z] : 小写的a-z之间的字母
[A-Z] : 大写的A-Z之间的字母
[z-A] : 错误, 只能从小到大
[A-z] : 从大写的A到小写的z,根据ascii表来匹配对应的值。
注意:顺序必须要按照ASCII码表数值的顺序编写
-
元字符
-
组合使用
\w\W : 匹配字母数字下划线与非字母数字下划线,匹配所有
\d\D : 无论是数字或者非数字都可以匹配
^ : startswith '^'在外面使用: 表示开头。 [^]: 表示取反的意思。
[^ab]: 代表只去ab以外的字符。 [^a-z]: 取a-z以外的字符。
$ : endswith
^$ : 配合使用叫做精准匹配,如何限制一个字符串的长度或者内容
| : 表示或。ab|abc如果第一个条件成立,则abc不会执行,怎么解决,针对这种情况把长的写在前面就好了,一定要将长的放在前面。
.* :贪婪匹配
.*? :非贪婪匹配 ----> 可以做过滤想要获取的数据之前的数据
re模块
在python中若想使用正则表达式,必须通过re模块来实现
为什么要使用正则表达式
想获取某一堆字符串中的某些字符,正则表达式可以帮我们过滤,并提取出我们需要的字符数据
应用场景
爬虫:re、Beautifulsoup4、Xpath、selector
数据分析:re、pandas、numpy...
用户名与密码、手机号输入认证:检测输入的内容合法性
re模块的使用(三种常用方法)
1、.findall('正则表达式', str) :匹配所有的字符串,拿到返回的结果,返回的结果是一个列表
import re
str3 = 'Mr shen 998'
t = re.findall('[A-Za-z0-9]{3}',str3)
print(t) # ['she', '998']
2、.search('正则表达式', str) :在匹配一个字符串成功后,拿到结果后结束,不往后匹配,返回的结果是一个对象
想要提取获取对象中的值,对象.group()得到
import re
str3 = 'Mr shen 998'
t2 = re.search('[A-Za-z0-9]{3}', str3)
print(t2) # <re.Match object; span=(3, 6), match='she'>
print(t2.group()) # she
3、.match('正则表达式', str) :从匹配的字符开头匹配,若开头不是想要的内容,则返回None,匹配成功后返回的结果是一个对象
想要提取获取对象中的值,对象.group()得到
import re
# 手机号认证
while True:
str1 = input('请输入手机号:').strip()
# ^ 表示开头
# | 表示或
# $ 表示结束
# (13|14|18)表示获取一个值13或14或18
# [0-9] 表示限制取值范围
# {n} 表示获取n个值
if re.match('^(13|14|15|17|18|19)[0-9]{9}$', str1):
print('手机号格式正确')
break
else:
print('输入格式不正确')
import re
str2 = 'shen988'
# [A-Za-z0-9] 表示限制取值范围
# {6} 表示取6个值
obj = re.match('[A-Za-z0-9]{6}', str2)
print(obj) # 对象<re.Match object; span=(0, 6), match='shen98'>
print(obj.group()) # shen98
import re
str3 = 'Mr shen 998'
t3 = re.match('[A-Za-z0-9]{2}', str3) # 如果限制取3位则会报错,从头找不到三位
print(t3) # <re.Match object; span=(0, 2), match='Mr'>
print(t3.group()) # Mr
爬虫四部原理
1、发送请求:requests
2、获取响应数据:对方机器直接返回
3、解析并提取想要的数据:re
4、保存提取后的数据:with open()存到文件中
爬虫三步曲:
1、发送请求:requests
2、解析数据
3、保存数据