re模块

Posted biulo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了re模块相关的知识,希望对你有一定的参考价值。

re模块

import re

根据正则规则从一段内容中查找结果

findall

从字符串中选出所有能匹配正则表达式规则的内容,以列表的形式返回

ret = re.findall(‘\d+‘,‘alex123yuan234‘)

print(ret)

search

在字符串内查找匹配,只找到第一个匹配并返回信息,返回的是一个结果集,要通过group取值,如果没有匹配到内容,则返回None,group取值会报错,所以一般不直接打印ret

ret = re.search(‘\d+‘,‘alex123yuan234‘)

if ret:

  print(ret.group())

match

作用和search一样,不过只在字符串开始处匹配。在search里的正则规则前加一个 ^  search的功能就和match一样了

替换

sub

ret = re.sub(‘\d+‘,‘sb‘,‘alex84wusir73‘) # 默认替换所有

ret = re.sub(‘\d+‘,‘sb‘,‘alex84wusir73‘,1) # 写了1表示替换一次

print(ret)

subn

ret = re.subn(‘\d+‘,‘sb‘,‘alex84wusir73‘)

print(ret) # (‘alexsbwusirsb‘, 2) 返回的是元组,表示替换了两次

split

ret = re.split(‘\d+‘,‘alex84wusir73yuan‘)

print(ret)          按照正则规则切割字符串

参数说明

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

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

空间方面操作

finditer

ret = re.finditer(‘\d+‘,‘alex84‘*200)              返回一个迭代器,内容是结果集

for i in ret:

  print(i.group())                            用group从结果集取值

时间操作方面

compile

对于一个经常被重复使用的正则表达式

我们可以先进行一次编译

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

这样节省了代码的‘时间‘

par = re.compile(‘d+‘)

ret = par.findall(‘alex84‘)

print(ret)

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

findall和分组

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

ret = re.findall(‘>(\w+)<‘,r‘<title>qqxing<\title>‘)

print(ret)

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

ret = re.findall(‘\d+(?:\.\d+)?‘,r‘1.23+2.34‘)

print(ret)

split和分组

会保留被切掉的在分组中的内容

search和分组

ret = re.search(r‘<(\w+)>(\w+)<\\(\w+)>‘,r‘<title>qqxing<\title>‘)

print(ret.group(0)) # 不受到分组的影响

print(ret.group(1))

print(ret.group(2))        可以通过索引取值

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

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

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

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

分组命名

 

ret = re.search(r<(?P<tab1>\w+)>(?P<content>\w+)<\\(\w+)>,r<title>qqxing<\title>)
print(ret.group(0))  # 不受到分组的影响
print(ret.group(tab1))  # 不受到分组的影响
print(ret.group(content))  # 不受到分组的影响

(?P<名字>分组内容)    给分组命名

print(ret.group(‘名字‘)    查看内容

使用正则解决问题的两种方式

当我们想匹配的内容混在不想匹配的内容中

只能把不要的也匹配出来 然后去掉不想要的  剩下的就是我们需要的

把整个结构描述下来 对想要的进行分组

ret = re.findall(‘\d+\.\d+|(\d+)‘,‘1-2*(60+(-40.35/5)-(-4*3))‘)

ret.remove(‘‘)

print(ret)

以上是关于re模块的主要内容,如果未能解决你的问题,请参考以下文章

python 正则表达式 re模块基础

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

Python基础之re模块

如何有条件地将 C 代码片段编译到我的 Perl 模块?

python re模块findall()详解

Node.js JavaScript 片段中的跳过代码