Python爬虫正则表达式总结

1.正则表达式:RE(regular expression)。(W)

▪用来简洁表达一组字符串的表达式
▪通用的字符串表达框架
▪针对字符串表达"简洁"和"特征"思想的工具
▪判断某字符串的特征归属

2.为什么使用正则表达式?(W)

●简洁

3.如何使用正则表达式?(H)

编译:将符合正则表达式语法的字符串转换成正则表达式特征。(使用re库)
bs4模块通过css selector定位html标签爬取数据,而正则表达式通过字符串匹配html标签爬取数据。

4.正则表达式的语法:

由字符和操作符构成

5.正则表达式的常用操作符:

.	表示任何单个字符
[ ]	字符集,对单个字符给出取值范围	如:[abc]:a、b、c,[a-z]:a到z单个字符
[^ ]()	非字符集,对单个字符给出排除范围	如:[^abc]:非a/b/c的单个字符

*	前一个字符0次或无限次扩展		如:abc*:ab/abc/abcc/abccc......
+	前一个字符1次或无限次拓展		如:abc+:abc/abcc/abccc.....
?	前一个字符0次或1次拓展		如:abc?:ab/abc

|     ()	左右表达式任意一个			如:abc|def:abc/def
{m}	扩展前一个字符m次			如:ab{2}c:abbc
{m,n}	扩展前一个字符m-n次,   (m,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_]		任一字母、数字或下划线(单词字符)
\s	空白字符,例如空格、制表符、换行符等,等价于[\f\n\r\t\v]
(\D=\^d)		

6.正则表达式实例:

^[A-Za-z]+$				由26个字母组成的字符串
^[A-Za-z0-9]+$				由26个字母和数字组成的字符串
^-?\d+$					整数形式的字符串
^[0-9]*[1-9][0-9]*$				正整数形式的字符串
[1-9]\d{5}					中国境内邮政编码,6[\u4e00-\u9fa5]				匹配中文字符
\d{3}-\d{8}|d{4}-\d{7}			国内电话号码
[a-zA-Z]+://[^\s]*[.com|.cn]			匹配.com/.cn后缀的url地址

7.正则表达式的表示类型:

re库采用raw String 类型表示正则表达式,表示为:r’text’
●raw String(原生字符串类型):不包含转义符的字符串。
建议:当正则表达式中包含 转义符 时,使用raw String类型。(不繁琐)

8.re库主要功能函数:

re.search(pattern,string,flags=0):在字符串中搜索与正则表达式一样的地方,返回第一个匹配上的内容,为match对象。
re.match(pattern,string,flags=0):只在开始位置匹配,是则返回match对象,否则返回none。(从头)
re.findall(pattern,string,flags=0):搜索字符串,返回所有匹配上的内容,类型为字符串列表或元组列表
re.split(pattern,string,maxsplit=0,flags=0):将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.sub(pattern,repl,string,count=0,flags=0):查找匹配并替换
re.compile(pattern,flags=0):将正则表达式的字符串形式编译成正则表达式对象(面向对象)
pattern:raw String/String,	string:待匹配字符串,    flags:正则表达式使用时的控制标记
maxsplit:最大分割数,剩余部分作为最后一个元素输出。(maxsplit=1,则只分割一个)
repl:替换匹配字符串的字符串。count:匹配的最大替换次数

flags:
re.I   re.IGNORECASE	忽略正则表达式的大小写,[A-Z]能够匹配小写字符
re.M re.MULTILINE		正则表达式中的^操作符能够将给定字符串的每行当作匹配开始
re.S  re.DOTALL		正则表达式中的.操作符能够匹配所有字符

9.match对象:

match对象的属性:
	(1).string:待匹配的文本
	(2).re:匹配时使用的pattern对象(正则表达式)
	(3).pos:正则表达式搜索文本的开始位置
	(4).endpos:正则表达式搜索文本的结束位置
match对象的方法:
	(1.group(n):group(0)输出全部子匹配,group(n)输出第n个括号的匹配结果
	(2.start():匹配字符串在原始字符串的开始位置
	(3.end():匹配字符串在原始字符串的结束位置
	(4.sparn():返回(.start(),.end())

10.贪婪匹配和最小匹配:

Re库默认采用贪婪匹配,即输出匹配最长的字符串。
最小匹配操作符:(在贪婪匹配的基础上)
?、+?、??、{m,n}?
.
?代表匹配任意字符。此处的?是非贪婪模式匹配(懒惰模式),一旦找到能匹配的字符就完成一次匹配,即最短距离匹配。
如果不加?则为贪婪模式匹配,.*进行最长距离匹配

11.子匹配与分组:

子匹配:()。
分组:一个正则表达式中可存在多个()/子匹配,把括号内的子匹配作为匹配返回结果。
若只需要获得子匹配的结果,可以使用re.findall方法,search和match都要返回完整匹配。
当只有一个括号(分组)时,findall返回类型为字符串列表,当存在两个及以上括号(分组)时,findall返回类型为元组的列表。

发布了30 篇原创文章 · 获赞 1 · 访问量 1891

猜你喜欢

转载自blog.csdn.net/Zzh1110/article/details/104006927
今日推荐