04、Python爬虫之正则表达式基础(超全)



前言

正则表达式是一套规则,常用于字符串的查找、匹配、替换等操作,通常用来进行数据清洗。正因为是一套规则,正则表达式并不只适用于Python,也适用于C、C++、Java等编程语言。

今日份关键词:正则表达式基础


一、元字符

代码说明举例
.匹配除换行符(\n)以外的任意字符. 可以匹配“OK/nfine/tR”中的字符O、K、f、i、n、e、/t、R
\w匹配字母、数字、下划线或汉字\w 可以匹配“好6wk\nd”中的“好、6、w、k、d”,但不能匹配"\n"
\W匹配除字母、数字、下划线或汉字以外的字符\W 可以匹配“好6wk\nd”中的“\n”,但不能匹配“好、6、w、k、d”
\s匹配任意的空白符(包括\n和\t)\s 可以匹配"xiao\tX"中的"\t"
\S匹配除单个的空白符(包括\n和\t)以外的字符\S 可以匹配xiao\tX"中的"x,i,a,o,X"
\b匹配单词的开始或结束,在内容左侧时表示匹配单词的开始,在内容右侧时表示匹配单词的结束,单词的分界符通常是空格、标点符号或者换行\bw 匹配“What is this?word”字符串中的what和word中的w
s\b 匹配“What is this?word”字符串中的is和this中的s
\B与\b相反,在内容左侧时表示匹配单词的结束,在内容右侧时表示匹配单词的开始,单词的分界符通常是空格、标点符号或者换行\Bs 匹配“What is this?word”字符串中的is和this中的s
w\B 匹配“What is this?word”字符串中的what和word中的w
\d匹配数字0~9,相当于[0-9]\d 匹配“hao7”中的7
\D匹配非数字(包括空格、\n、\t、\r等)\d 匹配“hao7\t”中的h、a、o、\t
^匹配字符串的开头。在多行模式中,匹配每一行的开头^w 匹配“what is this?word”中的what中的w,而不能匹配word中的w
$匹配字符串的末尾。在多行模式中,匹配每一行的末尾e$ before pressure中的pressure中的e,而不能匹配before中的e

二、相对精确限定符

限定符说明举例
*匹配前面的字符零次或更多次yyd*syou,该表达式可以匹配的范围从yysyou到yyd…syou
+匹配前面的字符一次或更多次yyd+syou,该表达式可以匹配的范围从yydsyou到yydd…syou
?匹配前面的字符零次或一次yyds?you,该表达式可以匹配yydsyou和yydyou
{x}匹配前面的字符x次yyd{3}syou,该表示式只匹配yydddsyou
{x,}匹配前面的字符最少x次yyd{3,}syou,该表达式只匹配yydddsyou到yyddd…syou
{x,y}匹配前面的字符最少x次,最多y次yyd{3,5}syou,该表达式只匹配yydddsyou、yyddddsyou、yydddddsyou这3种情况

三、数字或字符

代码说明举例
[…]字符集,其中的字符可以逐个列出,也可以列出范围[my] 匹配“mysoft”中的“m、y”
[a-d] 匹配“abcdefg”中的"a、b、c、d"
[0-9] 则匹配数字0到9
[^…]将^放在字符集的开始位置,表示排除字符集中所列字符[^my] 匹配“mysoft”中的“s、o、f、t”
[^a-d] 匹配“abcdefg”中的"e、f、g"

四、特殊符号

4.1 转义字符 \

  • 原字符串:
 https://www.baidu.com
  • 使用转义字符:
 https://www\.baidu\.com

以此来避免歧义。

4.2 条件分支 |

符号说明举例
|“或”操作,表示左右表达式任选一个,总是先匹配左表达式,如果成功,就不再匹配右表达式Hello|世界:将匹配字符串“Hello,world,世界”中的Hello和世界”
\w{2}|\w{3}|\w{4} 可以匹配姓名2个字到4个字,例如李明,欧阳修、西门吹雪等

PS:在使用 | 进行或操作时,| 的左右两侧不允许有空格

4.3 分组符号()

分组符号的简单应用: 2022-04-20 13:34:30
使用分组匹配出年月日:(\d{4}-\d{2}-\d{2})

常用的分组符号

符号说明举例
(...)分组,被小括号括起来的表达式将被看作为一个分组,如果表达式中使用 | ,则只在该组中有效(\.[0-9] {1,3}){3} 匹配127.0.0.1 中的.0.0.1。在使用re.findall()方法匹配时,结果为 .1
(?:…)(…)的不分组版本,用在使用 | 或者后接限定符时(?:\.[0-9] {1,3}){3} 匹配127.0.0.1 中的.0.0.1。在使用re.findall()方法匹配时,结果为 0.0.1
(?=…)的字符串内容需要匹配表达式才算匹配成功T(?=\d) 匹配“5T和T5"中的T5中的T
(?<=…)的字符串内容需要匹配表达式才算匹配成功(?=\d)T 匹配“5T和T5"中的5T中的T
(?!..)的字符串内容需要匹配表达式才算匹配成功T(?!\d) 匹配“5T和T5好"中的"5T和”中的T
(?<!..)的字符串内容需要匹配表达式才算匹配成功(?<!\d)T 匹配“5T和T5"中的“和T5”中的T

五、模糊限定符

符号说明
*?重复任意次,尽可能少重复
+?重复1次或更多次,尽可能少重复
??重复0次或者1次,尽可能少重复
{x,y}?重复x到y次,尽可能少重复
{x,}?重复x次以上,尽可能少重复

六、简单举例

  • \d{5} 表示匹配5个数字
  • \w{20} 表示匹配20个字符
  • \w+ 表示匹配1个或多个字符
  • .*? 表示匹配任意字符任意次数,尽可能减少重复

总结

今天主要总结了正则表达式在爬虫中可能用到的一些基础知识。本来想敷衍了事,但越写越觉得亏,都写了那么多了,要不再写写?于是一边写一边整合资料,写写党永远不亏(emo)。由于篇幅略多,下一节再更新正则表达式在爬虫中的常用方法。(ps.如果有写错的部分,请不吝赐教,不胜感激)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值