2021最新《python爬虫从0-1》5.正则表达式讲解

常用正则表达式

字符描述
\d代表任意数字,就是阿拉伯数字 0-9 这些玩意。
\D大写的就是和小写的唱反调,\d 你代表的是任意数字是吧?那么我 \D 就代表不是数字的。
\w代表字母,数字,下划线。也就是 a-z、A-Z、0-9、_。
\W跟 \w 唱反调,代表不是字母,不是数字,不是下划线的。
\n代表一个换行。
\r代表一个回车。
\f代表换页。
\t代表一个 Tab 。
\s代表所有的空白字符,也就是上面这个:\n、\r、\t、\f。
\S跟 \s 唱反调,代表所有不是空白的字符。
\A代表字符串的开始。
\Z代表字符串的结束。
^匹配字符串开始的位置。
$匹配字符创结束的位置。
.代表所有的单个字符,除了 \n \r
[…]代表在 [] 范围内的字符,比如 [a-z] 就代表 a到z的字母
[^…]跟 […] 唱反调,代表不在 [] 范围内的字符
{n}匹配在 {n} 前面的东西,比如: o{2} 不能匹配 Bob 中的 o ,但是能匹配 food 中的两个o。
{n,m}匹配在 {n,m} 前面的东西,比如:o{1,3} 将匹配“fooooood”中的前三个o。
{n,}匹配在 {n,} 前面的东西,比如:o{2,} 不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。
*和 {0,} 一个样,匹配 * 前面的 0 次或多次。 比如 zo* 能匹配“z”、“zo”以及“zoo”。
+和{1,} 一个样,匹配 + 前面 1 次或多次。 比如 zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。
和{0,1} 一个样,匹配 ?前面 0 次或 1 次。
ab
()匹配括号里面的内容。

re库

如果我们想要从
muyang has 100 bananas
拿到100这个数字

我们就可以
import re

content = 'muyang has 100 bananas'
res = re.match('^mu.*(\d+)\s.*s$',content)
print(res.group(1))

()的意思表示 我们需要的东西

那么如果我们想要 100 这个数字呢?

import re

content = 'muyang has 100 bananas'
res = re.match('^mu.*?(\d+)\s.*s$',content)
print(res.group(1))

看出有什么区别吗?

多了一个?
在这里呢,涉及到两个概念

一个是:贪婪匹配
另一个是:非贪婪匹配

所谓贪婪匹配

就是我们的第一段代码
一个数一个数都要去匹配
而非贪婪呢

我们是直接把 100 给匹配出来了

刚才我们用到了.*?

是我们在匹配过程中最常使用到的

表示的就是匹配任意字符
但是
.*?的 . 代表所有的单个字符,除了 \n \r
如果我们的字符串有换行了
怎么办呢?

比如这样

content = """muyang  has 100 
bananas"""

直接用 re.S 就可以了

import re

content = """muyang has 100 
bananas"""
res = re.match('^mu.*?(\d+)\s.*s$',content,re.S)
print(res.group(1))

re.search

它会直接去扫描字符串
然后把匹配成功的第一个结果的返回给你

import re

content = """muyang  has 100 
bananas"""
res = re.search('mu.*?(\d+)\s.*s',content,re.S)
print(res.group(1))

这样我们可以获取到100

但是如果我们的内容是

content = """muyang has 100 bananas;
muyang   has 100 bananas;
muyang   has 100 bananas;
muyang has 100 bananas;"""

想要获取所有的 100 呢?

这时候就要用到 re 的另一个方法了

re.findall

通过它我们就能轻松的获取所有匹配的内容了

import re

content = """muyang has 100 bananas;
muyang has 100 bananas;
muyang has 100 bananas;
muyang has 100 bananas;"""
res = re.findall('mu.*?(\d+)\s.*?s;',content,re.S)
print(res)

教程地址

B站教程链接: https://www.bilibili.com/video/BV1gK4y1R7Ha?p=5.

python爬虫加群交流:820541914

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

和沐阳学逆向

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

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

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

打赏作者

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

抵扣说明:

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

余额充值