补充re模块

Re模块

Re.findall(正则表达式,要操作的字符串)

显示所有的结果

Re.search(正则表达式,要操作的字符串)

显示只查到的第一个结果的索引值,并且通过ret.group取得值

Ret = re.search(\d+,dsafjhafj34345sdfadfa)

If ret:

Print(ret.group)

 

Re.match(正则表达式,要操作的字符串)

显示默认给正则表达式加一个^,相当于从头开始找第一个,

 

Findall 找所有 返回列表

Search  找第一个 返回一个结果集,通过.group取值,如果没有匹配到,返回None, .group报错

Match  从头开始找第一个,返回一个结果集,通过.group取值,如果没有匹配到,返回None, .group报错

Match可以被search替代

re.search(^\d+,dsafjhafj34345sdfadfa) == re.match(\d+,dsafjhafj34345sdfadfa)

补充:

替换:

re.sub(正则表达式,要替换的内容,要操作的字符串)  默认替换所有,可以写替换几个

 

Ret = Re.sub(^\d+,SB,dsafjhafj34345sdfadfa)

Print(ret)  

 

re.subn(正则表达式,要替换的内容,要操作的字符串)  默认替换所有,可以写替换几个

Ret = Re.subn(^\d+,SB,dsafjhafj34345sdfadfa)

Print(ret)  #(dsafjhafj34345sdfadfa,1) 替换后的结果和替换了几次

切割:

Re.split(\d+,jafa 3434fjflasjflja 3434jkjj4l3jk34j)

Print(ret)  #按照正则表达式来切分字符串

 

参数说明:

参数 正则表达式 待匹配的字符串

替换 正则       要替换的结果  待匹配的字符串

Re.compile()

对于一个经常被重用的正则表达式 我们可以先进行一次编译

之后只要用到这个表达式直接拿出来用就行了

这样做就节省了代码的执行 时间

Par = re.compile(‘\d+’)

Print(par)

Ret = par.findall(‘asdfaf33434afsadf’)

Print(ret)

Re.finditer()

三个目标:

  1. 时间
  2. 空间
  3. 用户体验

Ret = re.findall(‘\d+’,’fd2324ff343adf45454’)

Print(ret)

Ret = re.finditer(‘\d+’,’fd2324ff343adf45454’)

For i in ret:   #得到结果集 ,用的时候才用.group取值

Print(i.group())

Par = re.compile(\d+)  #节省了时间

Ret =par.finditer(‘erre34343ffdfd454546v4n5nn4n3n4n5n43’)  #节省了空间

总结:

匹配:

Findall

Search   match 返回结果集 用.group取值

字符串其他处理:

替换 sub  subn

切割 spilt

进阶:

节省空间 finditer 返回一个迭代器,迭代器里装的都是结果集,需要通过group取值

Findall 配合分组使用 --->  findall 永远优先显示分组中的内容!!

在分组里加入 ?: 就等于取消这个分组的优先级别

节省时间 compile 能够提前编译一个正则表达式,当同一个正则需要多次被使用的时候,可以节省时间

分组在正则表达式中发挥的作用

分组在findall 当中默认会优先被显示出来

如果不想有限,name在分组中添加(?:正则规则)表示取消这个规则的优先显示

Import  re

Ret = re.findall(‘>(\w+)<’,r’<title>qqixng<\title>’)

Print(ret)  # findall 永远优先显示分组中的内容!!

 在分组里加入 ?: 就等于取消这个分组的优先级别

Split和分组,会保留被切掉的再分组中的内容

Search 和分组

在爬虫/数据清洗的过程中最常用的正则表达式的操作

并不是把我要的内容正则写出来

而是把整个页面都用正则描述下来,然后把我需要的内容放在分组里

这样就能够取到我想要的内容了

遇见分组:

Findall  优先显示分组中的内容

Spilt    保留被切掉的分组内的内容

Search  可以通过组的索引取值

取消分组的特殊行为 (?: 正则)

分组命名:

分组里添加 ?P<起的名字>就可以在 .group(‘起的名字’) 直接获取分组名字对应的内容

特殊的需求

HTML

<h2>hello</h2>  前后都是标签 直接显示中间的内容

猜你喜欢

转载自www.cnblogs.com/zhangxiangning/p/10740545.html