正则表达式re.findall快速入门

基础知识讲解

'\w’匹配字母

\w用于匹配任意一个字母

import re
exp = '  waefwe12345www678wfwe  '
re.findall('\w',exp)

'\d’匹配数字

\d用于匹配任意一个数字

import re
exp = '  waefwe12345www678wfwe  '
re.findall('\d',exp)

'|'或匹配

import re
exp = '   ArrarrBrrbrr'
re.findall('A[a-z].|a[a-z].',exp)

'.'过滤

在python正则表达式中,一个"."可以代表任意一个字符,类似于?
例如我们想匹配到arr、acc、akk等带有a的单词

import re
exp='arraccakk'
re.findall('a..',exp)

过滤[a-z]举例

import re
exp='arraccakk'
re.findall('a..',exp)

空格过滤型

例如下面的exp中,每个词两边都有一个空格

import re
exp = ' arr  acc  akk '
re.findall(' a.. ',exp)
输出:
[' arr ', ' acc ', ' akk ']    #引号里面是有空格的
去掉空格的写法:
re.findall(' (a..) ',exp)

[空]*号匹配 【重点】

[空格]*可以匹配到0-无穷多个空格
a*可以匹配到0-无穷多个a

补充:
a+可以匹配到至少一个a
a{2}可以匹配到刚好2个a
a{2,10}可以匹配2-10个a

import re
exp = '   ArrarrBrrbrr'
re.findall(' *[Aa]rr',exp)
输出结果:
['   Arrarr']

[例1] 在python软件中利用正则表达式替换值

例如,我们需要将如下代码的格式转换为字典

{
a:苹果
b:香蕉
c:菠萝
d:桃子
}

字典格式为:

{
"a":"苹果",
"b":"香蕉",
"c":"菠萝",
"d":"桃子"
}

数据量少可以进行手动添加。数据量多可以用正则表达式进行替换:
Ctri+r打开替换工具

(.*?):(.*)   #匹配到格式上

"($1)":"($2)",   #$1表示第一个值,$2表示第二个值

search()和match()

[例2] 取出指定位置数据

import re
exp='sfnwoefwefwifjwfoiwejof(我想要的数据在这里,想办法取出我)wijfiweofonoiwenoief'
re.findall(' *我.*',exp)[0][:16]   #这里用到的是python数据切片,不懂切片请自行百度

[例3]爬虫中利用正则取出数据

import re  #导入re模块

在网页源代码中提取出标签内的内容:

title = re.findall('<span class=title>(.*?)</span>',html_data)[0]

抓取windows._playinfo_=后面的内容(".“在python中有特殊含义,所以需要用”\"进行转义)

data = re.findall('<script>windows\._playinfo_=(.*?)</script>,html_data)[0]

在这里插入图片描述

[例4]记一次取出http://

某一次我想取出下列格式前面的http://或https://

https://1.1.1.1、http://1.1.1.1

re.search("://",ip).span()

span()会返回出该字符串出现的起始位置和最后出现的位置,输出结果如下图
在这里插入图片描述
所以可以这样写,这样ip[test:]就取到了://后面的内容了

test = re.search("://",ip).span()[1]
ip[test:]

html_data为网页源代码数据,[0]表示取第一个值,(.*?)表示进行匹配内容

[例5]记一次取接口

import re
a="../../../.../1aafds/adf"

aaa=re.search("/(\w|\d)",a).span()[0]
print(a[aaa:])
#结果:/1aafds/adf

.*?和.*的区别对比
.*?是非贪婪的,匹配的越少越好
.*是贪婪的,匹配的越广越好
对比:

>>> print(re.findall('a(.*?)b','a123ba123b'))
['123', '123']
>>> print(re.findall('a(.*)b','a123ba123b'))
['123ba123']

进阶分析:

1.匹配重复项

^(.+)$[\r\n](^\1$[\r\n]{0, 1})+

2.匹配身份证号

(\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(\d{6}(18|19|20)\d{2}(0[1-9]|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x))

相关视频:
十分钟快速入门正则表达式【推荐】

相关文章
正则表达式 re.findall 用法
正则表达式(.*?)和(.*)的区别

import pprint格式化输出模块
目前data为字符串,使用pprint可以格式化

一篇更详细的正则用法:
https://www.cnblogs.com/aaronthon/p/9435967.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

向阳-Y.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值