模块之re模块 collections模块 random模块

1.re模块

import re
使用python操作正则表达式的一个模块
我们使用这个模块 只需要 自己写正则表达式 和 带匹配的字符
模块名.方法名()

1.findall 返回所有满足匹配条件的结果,放在列表里

import re
ret=re.findall("d+","s1dd22d3")
print(ret)  #['1', '22', '3']
###findall分组和优先级效果
import re
ret = re.findall('[a-z]d','ab2748cdef14g239')
print(ret) #['b2', 'f1', 'g2']
ret = re.findall('([a-z])d','ab2748cdef14g239')
print(ret) #['b', 'f', 'g']
##去掉分组的效果:
ret = re.findall('(?:[a-z])d','ab2748cdef14g239')
print(ret) #['b2', 'f1', 'g2']
ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
print(ret)
View Code

2.search方法:两个参数,正则表达式和待匹配的字符串

返回的是第一个满足条件的项
使用.group()方法就可以获取到具体的值
需要注意的是,如果没有匹配上,使用.group()会报错
所以应该在使用group防止之前做判断

import re
ret = re.search('a', 'eva agon yuan')
print(ret) #<_sre.SRE_Match object; span=(2, 3), match='a'>
if ret:
    print(ret.group())  #a
ret = re.search('b', 'eva egon yuan')
print(ret.group())   #报错AttributeError
##分组
import re
ret = re.search('([a-z])d','ab2748cdef14g239')
print(ret.group())  #b2直接获取正则规则匹配到的项
print(ret.group(1)) #如果给group传递参数,那么传递的参数能够代表在正则表达式中组的次序
View Code

3.match.自带^效果。同search,不过尽在字符串开始处进行匹配.需要用group

import re
ret = re.match('a', 'eva agon yuan').group()
print(ret)  #AttributeError
ret = re.match('av', 'ava agon yuan').group()
print(ret)  #av
View Code

4.split切割

ret=re.split("d","s1ss22dd")  #默认全部分割
print(ret)  #['s', 'ss', '', 'dd']
ret=re.split("d","s1ss22dd",1)
print(ret)  #['s', 'ss22dd']
ret = re.split('[ab]', 'a1b2c3d4')
print(ret) # 先按'a'分割得到'''bcd',在对'''bcd'分别按'b'分割
2.split的优先级查询:使用分组,保留切割对象
import re
ret=re.split("(d)","s1ss22dd")  #默认全部分割
print(ret) #['s', '1', 'ss', '2', '', '2', 'dd']
View Code

5.sub替换

import re
ret=re.sub("d","J","sd1f4s8")
print(ret)  #sdJfJsJ
ret=re.sub("d","J","sd1f4s8",1)
print(ret)  #sdJf4s8 参数限制替换的个数
View Code

6.subn 返回一个元组(结果,替换个数)

import re
ret=re.subn("d","J","sd1f4s8")
print(ret)   #('sdJfJsJ', 3)
View Code

7.compile 进行编译,节省时间

import re
od=re.compile("d{3}")  #正则表达式编译一下得到一个结果,规则要匹配的是3个数字
ret=od.search("as1234ds") #正则表达式对象调用search,参数为待匹配的字符串
print(ret.group()) #123
View Code

8.finditer 返回一个迭代器,节省空间

import re
ret=re.finditer("d","as1234ds")
# print(next(ret).group()) #1 #查看第一个结果
# print(next(ret).group()) #2 #查看第二个结果
print([i.group() for i in ret]) #['1', '2', '3', '4']
View Code

9.r 取消这个字符串中的转译作用

凡是出现且没有特殊意义的时候都可以在字符串的前面加上r符号
r'\n'   r'
'
r'app
tp'
ret = re.search(r"<(w+)>w+</1>","<h1>hello</h1>") #l没有特殊意义
print(ret.group())
View Code

二.collections模块

1.namedtuple: 生成可以使用名字来访问元素内容的tuple

from collections import namedtuple
Point=namedtuple("Point",["x","y"])
p=Point(2,5)
print(p)  #Point(x=2, y=5)
print(p.x,p.y) #2 5
View Code

2.deque: 双端队列,可以快速的从另外一侧追加和推出对象

deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
队列:先进先出 双端队列:从两端操作

from collections import deque
q=deque([1,2,3])
#增加
q.append(5)
print(q)  #deque([1, 2, 3, 5])
q.appendleft(88)
print(q)  #deque([88, 1, 2, 3, 5])
#删除
q.pop()
print(q)  #deque([88, 1, 2, 3])
q.popleft()
View Code

3.OrderedDict: 有序字典

from collections import OrderedDict
dic=dict([("a",1),("b",2)])
print(dic)  #{'a': 1, 'b': 2}
od=OrderedDict(dic)
print(od)    #OrderedDict([('a', 1), ('b', 2)])
View Code

4.defaultdict: 带有默认值的字典

from collections import defaultdict
dic=defaultdict(list)
print(dic["k"],dic["k1"])  #(1) ()
dic=defaultdict(list)
dic["k"]=1
print(dic["k"],dic["k1"])  #() ()
使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict:
from collections import defaultdict
dic=defaultdict(None)
print(dic["k"]) #KeyError: 'k'
dic=defaultdict(lambda : "nonum")
dic["k1"]=2
print(dic["k"],dic["k1"]) #nonum  2
View Code

5.Counter: 计数器,主要用来计数

Counter类的目的是用来跟踪值出现的次数。以字典的键值对形式存储,其中元素作为key,其计数作为value。
from collections import Counter
C = Counter('abcdeabcdabcaba')
print(C)  #Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
View Code

三.random模块

###随机小数

print(random.random()) #无参数。在0<=n<1之间生成一个随机浮点数
print(random.uniform(1,5)) #有参数。在指定范围生成一个随机浮点数
###随机整数
应用:验证码
print(random.randint(1,5))# 在指定范围生成一个随机整数
print(random.randrange(1,10)) ##从指定范围内,按指定基数递增的集合中获取一个随机数
print(random.randrange(1,10,2))
View Code

##从序列中获取一个或多个随机元素

应用:抽奖
print(random.choice("jerd"))
print(random.choice([1,2,3]))
从集合中抽取数据
print(random.sample(li,2)) 获取指定长度的片断
View Code

用于将一个列表中的元素打乱

li=['12',"sd",123]
random.shuffle(li)
print(li)
View Code

验证码

验证码纯数字
import random
def f_code():
    code=""
    for i in range(0,6):
        num=random.randint(0,9)
        code=code+str(num)
    return code
print(f_code())
#验证码:数字和字母结合
import random
def f_code():
    code=""
    for i in range(0,6):
        num=random.randint(0,9)
        alp=chr(random.randint(65,90))  #chr()的参数为0--255时,返回当前整数对应的ascii字符
        #alp=random.randint(A,Z) #运行错误,返回的是整数
        choice=random.choice([num,alp])
        code=code+str(choice)
    return code
print(f_code())
View Code

匹配标签

import re
#<>内容相同
ret = re.search('<(?P<tag>w+)>(w+)</(?P=tag)>',"<h1>hello</h1>")
print(ret.group())
print(ret.group('tag'))
#<>内容不同
ret = re.search('<(?P<tag>w+)>(w+)</(?P<mag>w+)>',"<h1>hello</h2>")
print(ret.group('tag'))
print(ret.group('mag'))
print(ret.group())
View Code

匹配整数

import re
ret=re.findall("d+","1-2*(60+(-40.35/5)-(-4*3))")
print(ret)
#d+.d+ | d+
ret=re.findall("d+.d+|(d+)","1-2*(60+(-40.35/5)-(-4*3))")
ret.remove('')
print(ret)
View Code

匹配小数:d+.d+

匹配数字(包过整数):d+.?d*

在既有整数和小数中只匹配整数:d+.d+|(d+)

原文地址:https://www.cnblogs.com/zgf-666/p/8540834.html