python爬虫中的数据分析------正则表达式的详解

一. 什么是正则表达式

正则表达式,又称规则表达式,(英语: Regular Expression,在代码中常 简写为regex, regexp或者RE), 计算机科学的一个概念,正则表达式通常被用来检索,替换那些符合某个模式(规则)的文本.

正则表达式的应用场景:

1. 检查字符串的合法性

  • Ⅰ.验证用户名 (a-z,0-9,不能全是数字,不能全是字母)
  • Ⅱ.验证邮箱格式 (xxx@qq.com)
  • Ⅲ.验证电话号码 (11位数字)
  • Ⅳ.验证身份证 (18位 )
  • Ⅴ.验证QQ号码格式(5-12纯数字,第一位不能为0);

    2. 提取字符串中的信息

  • Ⅰ.提取一条短信中的数字
  • Ⅱ.提取文件名的后缀
  • Ⅲ.采集器(网络爬虫)

    3. 替换字符串

  • Ⅰ.替换字符串中的非法字符
  • Ⅱ.对电话号码进行屏蔽;(18323876542)
  • Ⅲ.替换占位符"hello{{name}}" hello王老二(版本框架)

    4. 分割字符串

  • Ⅰ.将一个字符串按照指定的规则进行分割;

元字符

元字符
解释:
\d与 [] (字符集)
[123456zxcv] 字符集只能匹配一个出现在集合里面的值
\d代表0到9的所有数字,[0123456789] 与\d等效
[a-zA-Z0-9_]只能这样写,不用加逗号和空格什么的,注意还有一个下划线.

数量词

在这里插入图片描述

精确匹配与泛匹配

解释:
泛匹配: 泛匹配是匹配所有的东西
精确匹配: 精确匹配是匹配括号里面的东西

贪婪匹配与非贪婪匹配

Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;
非贪婪则相反,总是尝试匹配尽可能少的字符。
在"*“,”?“,”+“,”{m,n}"后面加上?,使贪婪变成非贪婪。

二.re模块

re 模块的使用可以分为两种:第一种是对象式的方式,第二种是函数式的方式。

1.re.match

match() 用于查找字符串的头部(也可以指定起始位置),它是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果。它的一般使用形式如下:


match(pattern, string[, flag])


解释
其中, pattern 是正则表达式规则字符串, string 是待匹配的字符串, flag 是可选参数。
当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None

2 .re.search

search() 用于查找字符串的任何位置,它也是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果,它的一般使用形式如下:


search(pattern, string[, flag])

解释:
当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None

3.re.findall

上面的 match 和 search 方法都是一次匹配,只要找到了一个匹配的结果就返回。然而,在大多数时候,我们需要搜索整个字符串,获得所有匹配的结果。 findall() 的使用形式如下:


findall(pattern, string[, flag])

findall() 以列表形式返回全部能匹配的子串,如果没有匹配,则返回一个空列表。

4.re.split

split() 按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:


split(pattern, string[, maxsplit, flags])

解释:
其中, maxsplit 用于指定最大分割次数,不指定将全部分割。

5.re.sub

sub() 用于替换,使用形式如下:


sub(pattern, repl, string[, count, flags])

解释:
第一个参数为对应的正则表达式,第二个参数为要替换成的字符串,第三个参数为源字符串,第四个参数为可选项,代表最多替换的次数,如果忽略不写,则会将符合模式的结果全部替换。

6.re.compile

使用 compile() 函数将正则表达式的字符串形式编译为一个 Pattern 对象。通过该对象提供的一系
列方法对文本进行匹配查找,获得匹配结果(Match对象)。编译可以实现更高效的匹配查找等.
compile() 函数用于编译正则表达式,生成一个 Pattern 对象,它的一般使用形式如下:


import re
# 将正则表达式编译成 Pattern 对象
pattern = re.compile('\d+', re.S)

7 .flags的用法

在这里插入图片描述
在这里插入图片描述

8. 万能正则

(.*?) 匹配除了换行以外的任意字符串。无论长短,最多匹配一次,非贪婪匹配。
这个正则表达式可以解决你想要提取的大部分数据,在写正则表达式的时候可以首先尝试这个组合,也许能达到事半功倍的效果。并且常常结合 re.findall() 函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想做程序猿的员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值