re模块 ,random模块

Posted xdlzs

tags:

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

# 在python中使用正则表达式
# 转义符 : 在正则中的转义符 在python中的转义符
# 正则表达式中的转义 :
# ‘(‘ 表示匹配小括号
# [()+*?/$.] 在字符组中一些特殊的字符会现出原形
# 所有的 w d s( , , ) W D S都表示它原本的意义
# [-]只有写在字符组的首位的时候表示普通的减号
# 写在其他位置的时候表示范围[1-9]
# 如果就是想匹配减号 [1-9]

# python中的转义符
# 分析过程
‘ ‘ # 转义符 赋予这个n一个特殊的意义 表示一个换行符
# print(‘\\n‘)
# print\\n(‘C:\\next‘)
# print(r‘C: ext‘)
# ‘\\\\n‘ ‘\\n‘
# 结论
# r‘\\n‘ r‘ ‘ 在python中


# 转义符
# print(‘ ‘) # --> \\
# 是有特殊意义的
# 你看见了这个 不应该理解为这是一个‘‘,它是一个转义符
# 你想把这个转义符变成一个字符串‘‘,它必须经过转义
# ‘\\‘ 等于字符串数据类型的‘‘
# ‘\\n‘
# import re
# ret = re.search(‘\\\\n‘,‘\\n‘)
# print(ret)
# 如果一个字符串形式的‘‘取消了它转义符的意思,就表示一个字符串‘‘
# 那么就不需要再使用‘\\‘来表示‘‘了
# 我们就在字符串前面加上一个r‘‘,取消这个字符串中所有‘‘的转义
# import re
# ret = re.search(r‘\\n‘,r‘ ‘)
# print(ret)

# 在测试的工具中,如果带了,你又担心它会出现转义的情况
# 不管三七二十一,在测试工具里测好了的代码
# 拿到python中,统一放在字符串r‘‘中就行了

***********************************************************************************************
# re模块
# findall search match
# sub subn split
# compile finditer
# python中的正则表达式
# findall 会优先显示分组中的内容,要想取消分组优先,(?:正则表达式)
# split 遇到分组 会保留分组内被切掉的内容
# search 如果search中有分组的话,通过group(n)就能够拿到group中的匹配的内容
# import re
# 字符串
# 匹配
# findall *****
# ret = re.findall(‘d+‘,‘19874ashfk01248‘)
# print(ret) # 参数 返回值类型:列表 返回值个数:1 返回值内容:所有匹配上的项
# ret1 = re.findall(‘s+‘,‘19874ashfk01248‘)
# print(ret1)
# search *****
# ret2 = re.search(‘d+‘,‘@$19874ashfk01248‘)
# print(ret2) # 返回值类型: 正则匹配结果的对象 返回值个数:1 如果匹配上了就返回对象
# if ret2:print(ret2.group()) # 返回的对象通过group来获取匹配到的第一个结果
# ret3 = re.search(‘s+‘,‘19874ashfk01248‘)
# print(ret3) # 返回值类型: None 如果没有匹配上就是None
# match **
# ret4 = re.match(‘d+‘,‘19874ashfk01248‘)
# print(ret4)
# ret5 = re.match(‘d+‘,‘%^19874ashfk01248‘)
# print(ret5)


# 替换 replace
# sub ***
# print(‘replace789,24utdeedeeeeshf‘.replace(‘e‘,‘H‘,3))
# ret = re.sub(‘d+‘,‘H‘,‘replace789nbc2xcz392zx‘)
# print(ret)
# ret = re.sub(‘d+‘,‘H‘,‘replace789nbc2xcz392zx,48495‘,1)
# print(ret)
# subn ***
# ret = re.subn(‘d+‘,‘H‘,‘replace789nbc2xcz392zx‘)
# print(ret)

# 切割
# split ***
# print(‘alex|83|‘.split(‘|‘))
# ret = re.split(‘d+‘,‘alex83egon20taibai40‘)
# print(ret)

# 进阶方法 - 爬虫自动化开发
# compile ***** 时间效率
# re.findall(‘-0.d+|-[1-9]+(.d+)?‘,‘alex83egon20taibai40‘) --> python解释器能理解的代码 --> 执行代码
# ret = re.compile(‘-0.d+|-[1-9]d+(.d+)?‘)
# res = ret.search(‘alex83egon-20taibai-40‘)
# print(res.group())
# 节省时间 : 只有在多次使用某一个相同的正则表达式的时候,这个compile才会帮助我们提高程序的效率
#
# finditer ***** 空间效率
# print(re.findall(‘d‘,‘sjkhkdy982ufejwsh02yu93jfpwcmc‘))
# ret = re.finditer(‘d‘,‘sjkhkdy982ufejwsh02yu93jfpwcmc‘)
# for r in ret:
# print(r.group())
*****************************************************************************************************
# 正则表达式进阶
# 分组命名
# (?P<name>正则表达式) 表示给分组起名字
# (?P=name)表示使用这个分组,这里匹配到的内容应该和分组中的内容完全相同
# 通过索引使用分组
# 1 表示使用第一组,匹配到的内容必须和第一个组中的内容完全相同
# import re
# ret = re.findall(‘-0.d+|-[1-9]d*(.d+)?‘,‘-1asdada-200‘)
# print(ret)
# ret = re.findall(‘-100qweqwe-200)
# print(ret)
# ret = re.findall(‘www.(?:baidu|oldboy).com‘,‘www.oldboy.com‘) #?: 取消括号优先级
# print(ret)

# ret = re.findall(‘-0.d+|-[1-9]d*(?:.d+)?‘,‘-1asdada-200‘)
# print(ret)

# ret = re.split(‘d+‘,‘alex83egon20taibai40‘)
# print(ret)
# ret = re.split(‘(d+)‘,‘alex83egon20taibai40‘)
# print(ret)

# 分组遇见search
# ret = re.search(‘d+(.d+)(.d+)(.d+)?‘,‘1.2.3.4-2*(60+(-40.35/5)-(-4*3))‘)
# print(ret.group())
# print(ret.group(1))
# print(ret.group(2))
# print(ret.group(3))

# import re
# ret = re.findall(‘>(w+)<‘,r‘<a>wahaha<a>‘)
# print(ret)

# ret = re.search(r‘<(?P<name>w+)>(w+)</(w+)>‘,r‘<a>wahaha</b>‘)
# print(ret.group())
# print(ret.group(1))
# print(ret.group(2))

# 分组命名
# ret = re.search(r"<(?P<name>w+)>w+</(?P=name)>",r"<h1>hello</h1>")
# print(ret.group(‘name‘)) #结果 :h1
# # print(ret.group()) #结果 :<h1>hello</h1>
#
# ret = re.search(r"<(w+)>w+</1>","<h1>hello</h1>")
# print(ret.group(1))
# # print(ret.group()) #结果 :<h1>hello</h1>

# ret = re.search(r‘<(?P<tag>w+)>(?P<c>w+)</(w+)>‘,r‘<a>wahaha</b>‘)
# print(ret.group())
# print(ret.group(‘tag‘))
# print(ret.group(‘c‘))

*****************************************************************************************
一段爬虫代码
import re
from urllib.request import urlopen
# 内置的包 来获取网页的源代码 字符串
# res = urlopen(‘http://www.cnblogs.com/Eva-J/articles/7228075.html‘)
# print(res.read().decode(‘utf-8‘))

def getPage(url):
response = urlopen(url)
return response.read().decode(‘utf-8‘)

def parsePage(s): # s 网页源码
ret = com.finditer(s)
for i in ret:
ret = {
"id": i.group("id"),
"title": i.group("title"),
"rating_num": i.group("rating_num"),
"comment_num": i.group("comment_num")
}
yield ret

def main(num):
url = ‘https://movie.douban.com/top250?start=%s&filter=‘ % num # 0
response_html = getPage(url) # response_html是这个网页的源码 str
ret = parsePage(response_html) # 生成器
print(ret)
f = open("move_info7", "a", encoding="utf8")
for obj in ret:
print(obj)
data = str(obj)
f.write(data + " ")
f.close()

com = re.compile(
‘<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>d+).*?<span class="title">(?P<title>.*?)</span>‘
‘.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>‘, re.S)
count = 0
for i in range(10):
main(count) # count = 0
count += 25

********************************************************************************************************************
random 模块


import random
# 随机 : 在某个范围内取到每一个值的概率是相同的
# 随机小数
# print(random.random()) # 0-1之内的随机小数
# print(random.uniform(1,5)) # 任意范围之内的随机小数

# 随机整数 *****
# print(random.randint(1,2)) # [1,2] 包含2在内的范围内随机取整数
# print(random.randrange(1,2)) # [1,2)不包含2在内的范围内随机取整数
# print(random.randrange(1,10,2)) # [1,10)不包含10在内的范围内随机取奇数

# 随机抽取
# 随机抽取一个值
# lst = [1,2,3,‘aaa‘,(‘wahaha‘,‘qqxing‘)]
# ret = random.choice(l)
# print(ret)
# 随机抽取多个值
# ret = random.sample(lst,2)
# print(ret)

# 打乱顺序 在原列表的基础上做乱序
# lst = [1,2,3,‘aaa‘,(‘wahaha‘,‘qqxing‘)]
# random.shuffle(lst)
# print(lst)

# 抽奖 彩票 发红包 验证码 洗牌

# 生成随机验证码
# 4位数字的
import random
# 0-9
# 基础版本
# code = ‘‘
# for i in range(4):
# num = random.randint(0,9)
# code += str(num)
# print(code)

# 函数版本
# def rand_code(n=4):
# code = ‘‘
# for i in range(n):
# num = random.randint(0,9)
# code += str(num)
# return code
#
# print(rand_code())
# print(rand_code(6))

# 6位 数字+字母
# print(chr(97))
# print(chr(122))
# import random

# 基础版
# code = ‘‘
# for i in range(6):
# rand_num = str(random.randint(0,9))
# rand_alph = chr(random.randint(97,122))
# rand_alph_upper = chr(random.randint(65,90))
# atom_code = random.choice([rand_num,rand_alph,rand_alph_upper])
# code += atom_code
# print(code)

# 函数版
# def rand_code(n=6):
# code = ‘‘
# for i in range(n):
# rand_num = str(random.randint(0,9))
# rand_alph = chr(random.randint(97,122))
# rand_alph_upper = chr(random.randint(65,90))
# atom_code = random.choice([rand_num,rand_alph,rand_alph_upper])
# code += atom_code
# return code
#
# ret = rand_code()
# print(ret)

# 数字/数字+字母
# def rand_code(n=6 , alph_flag = True):
# code = ‘‘
# for i in range(n):
# rand_num = str(random.randint(0,9))
# if alph_flag:
# rand_alph = chr(random.randint(97,122))
# rand_alph_upper = chr(random.randint(65,90))
# rand_num = random.choice([rand_num,rand_alph,rand_alph_upper])
# code += rand_num
# return code
#
# ret = rand_code(n = 6)
# print(ret)

# ***** 永远不要创建一个和你知道的模块同名的文件名







































































































































































































































































































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

re模块 ,random模块

python学习24天----re模块py正则random模块

Python之常用模块(re,时间,random,os,sys,序列化模块)(Day20)

pyhton学习笔记5:常用模块:datatime,random,json,re

15-常用模块

python---基础知识回顾(模块sys,os,random,hashlib,re,json,xml,shutil,configparser,logging,datetime,time,集合,(代码