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

时间:2021-11-21 22:33:23

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

1.re模块

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

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

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
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防止之前做判断

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
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

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
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切割

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
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替换

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
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 返回一个元组(结果,替换个数)

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
import re
ret
=re.subn("\d","J","sd1f4s8")
print(ret) #(
'sdJfJsJ', 3)
View Code

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

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

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

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
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 取消这个字符串中的转译作用

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

二.collections模块

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

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
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是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
队列:先进先出 双端队列:从两端操作

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
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: 有序字典

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
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: 带有默认值的字典

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
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: 计数器,主要用来计数

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
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模块

###随机小数

模块之re模块 collections模块 random模块模块之re模块 collections模块 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

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

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

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

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
li=['12',"sd",123]
random.shuffle(li)
print(li)
View Code

验证码

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
验证码纯数字
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

匹配标签

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
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

匹配整数

模块之re模块 collections模块 random模块模块之re模块 collections模块 random模块
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+)