码迷,mamicode.com
首页 > 其他好文 > 详细

re模块

时间:2019-03-22 18:34:23      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:时间   findall   替换   match   取消   去掉   迭代   tab   常用   

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模块

标签:时间   findall   替换   match   取消   去掉   迭代   tab   常用   

原文地址:https://www.cnblogs.com/biulo/p/10579866.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!