提示:文末有福利!最新Python爬虫资料/学习指南>>戳我领
文章目录
前言
正则表达式的作用&匹配过程简述
正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则表达式的概念,Python同样不例外,利用了正则表达式,我们想要从返回的页面内容提取出我们想要的内容就易如反掌了。
正则表达式的大致匹配过程是:
- 依次拿出表达式和文本中的字符比较
- 如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败
- 如果表达式中有量词或边界,这个过程会稍微有一些不同
话不多说,开始学习
正则表达式
1、正则表达式的概念
用来表达字符串的简洁方式
通用的字符串表达框架
字符串匹配
2、正则表达式的语法
正则表达式长常用操作符
.:表示任何单个字符。
[]:字符集,对单个字符给出取值范围。[abc]表示a,b,c,[a-z]表示a到z的单个字符。
[^ ]:非字符集,对单个字符给出排除范围。[^abc]表示非a或非b或非c的单个字符。
*:前一个字符出现0次或无限次扩展。abc*表示ab,abc,abcc,abccc等。
+:前一个字符1次或无限次扩展。abc+表示abc,abcc,abcc等
?:前一个字符0次或1次扩展。abc?表示ab、abc。
|:左右表达式任意一个。abc|def表示abc、def。
{m}:表示扩展前一个字符m次。ab{2}c表示abbc。
{m,n}:扩展前一个字符m至n次(含n),ab{1,2}c表示abc、abbc。
^:匹配字符串开头。^abc表示abc且在一个字符串的开头。
$:匹配字符串结尾。abc$表示abc且在一个字符串的结尾。
():分组标记,内部只能使用|操作符。(abc)表示abc,(abc|def)表示abc、def。
\d:数字,等价于[0-9]。
\w:单词字符,等价于[A-za-z0-9_]。
#匹配中文字符串:[\u4e00-\u9fa5]
匹配IP地址的正则表达式
IP地址分4段,每段0-255。
(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])
3、Re库的基本使用
Re库介绍
Re库是python标准库,主要用于字符串的匹配。
调用方式:import re
正则表达式的表示类型
raw string类型(原生字符串类型)
用法:r''。即在字符串前面加一个r。
原生字符串:不含转义符\的字符串。
string类型
即不加r,是平时用的字符串,更繁琐。
需用\\来表示\
Re库主要功能函数
re.search(pattern,string,flags=0):
在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象。
pattern:正则表达式的字符串或原生字符串表示。
string:待匹配字符串。
flags:使用时的控制标记。
re.I | re.IGNORECASE:忽略正则表达式的大小写,[A-Z]能够匹配小写字符。
re.M | re.MULTILINE:正则表达式种的^操作符能够将给定字符串的每行当作匹配开始。
re.S | re.DOTALL:正则表达式种的.操作符能够匹配所有字符,默认匹配除换行外的所有字符。
re.match(pattern,string,flags=0):
从一个字符串的开始位置起匹配正则表达式,返回match对象。
参数含义同re.search。
re.findall(pattern,string,flags=0):
搜索字符串,以列表类型返回全部能匹配的字串。
参数含义同re.search。
re.splite(pattern,string,maxsplit=0,flags=0):
将一个字符串按照正则表达式匹配结果进行分割,返回列表类型。
参数含义同re.search。
maxsplit:最大分割数,剩余部分作为最后一个元素输出。
re.finditer(pattern,string,flags=0):
搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象。
参数含义同re.search。
re.sub(pattern,repl,string,count=0,flags=0):
在一个字符串中替换所有匹配正则表达式的子串,返回替换后的子串。
参数含义同re.search。
repl:替换匹配字符串的字符串。
count:匹配的最大替换次数。
#re.compile:面向对象。
rst=re.search(r’[1-9]\d{5},'BIT 100081")
等价于
pat=re.compile(r’[1-9]\d{5}')
rst=pat.search(‘BIT 100081’)
#re.compile(pattern,flags=0):
将正则表达式的字符串形式编译成正则表达式对象。
4、Re库的match对象
Match对象的属性
.string:待匹配的文本。
.re:匹配时使用的pattern对象(正则表达式)。
.pos:正则表达式搜索文本的开始位置。
.endpos:正则表达式搜索文本的结束位置。
Match对象的方法
.group(0):获得匹配后的字符串。
.start():匹配字符串在原始字符串的开始位置。
.end():匹配字符串在原始字符串的结束位置。
.span():返回(.start(),.end())
5、Re库的贪婪匹配和最小匹配
贪婪匹配
Re库默认采用贪婪匹配,即输出匹配最长的子串。
最小匹配操作符
*?:前一个字符0次或无限次扩展,最小匹配。
+?:前一个字符1次或无限次扩展,最小匹配。
??:前一个字符0次或1次,最小匹配。
{m,n}?:扩展前一个字符m至n次(含n),最小匹配。
总结
关于正则表达式更多的相关知识,大家可以阅读一篇非常有名的文章叫《正则表达式30分钟入门教程》
Python爬虫基础入门系列(3)就到这,希望大家早日修炼成为爬虫大佬!当然,如果你准备系统地学爬虫及更多Python编程技术,可戳我文末的名片,Free领取最新Python爬虫资料/免费咨询/学习路线规划~