9.re正则表达式模块,用于字符串的模糊匹配

元字符:

第一:点为通配符

用.表示匹配除了换行符以外的所有字符

import re
res=re.findall('a..x','adsxwassxddfr')
print(res)

第二:^来匹配最开始的部位

import re
res=re.findall('^a..s','asdswassxddfr')
print(res)

第三:$来匹配最末尾的部位

import re
res=re.findall('a..s$','wassxddfrasds')
print(res)

第四:*用于匹配和前面的字符重复了多少次(0到无穷次)

import re
res=re.findall('as*','wassssbewq')
print(res)
res=re.findall('s*','wassssbewq') #没有s也能匹配到空值
print(res)

第五:+用于匹配和前面的字符重复了多少次(1到无穷次)

import re
res=re.findall('as+','wassssbewq')
print(res)
res=re.findall('s+','wassssbewq') #必须要s才能匹配到
print(res)

第六:?用于匹配和前面的字符重复了多少次(0到1)

import re
res=re.findall('as?','wassssbewq') #多少个重复的都只取1个,去重
print(res)
res=re.findall('s?','wassssbewq') #没有s也能匹配到空值
print(res)

第七:{}用于匹配和前面的字符重复了多少次

范围0到无穷 {0,}
范围1到无穷 {1,}
范围0到1 {0,1}
范围固定次数{固定次数}

import re
res=re.findall('as{0,}','wassssbewq') #多少个重复的都只取1个,去重
print(res)
res=re.findall('s{6}','wassssssbewq') #没有s也能匹配到空值
print(res)

第八:[]字符集

[]字符集里面除了-,^,\

import re
res=re.findall('b[ef]w','wassssbewqbfw') #e或f
print(res)
res=re.findall('b[a-z]w','wassssbewqbfw') #区间a到z
print(res)
res=re.findall('b[^a-z]w','wabewqbfwb3w') #[]里面的^是除了集合内这个元素以外的都匹配
print(res)
#如何找出这条算式最里层的括号
res=re.findall('\([^()]*\)','12+(34+6-2*(2-1))') #()的前面加上\可以转换成没有功能的普通括号
print(res) #要找出的是一个里面没有括号的括号,首先识别出括号\( \)
#然后再中间用集合去除掉括号内还有括号的情况,然后加个*来弄多个字符串的内容

第九:前面的*,+,?等都是贪婪匹配,按最大的去匹配

在后面加上一个?可以使其变成惰性匹配

import re
res=re.findall('as*?','wassssbewq') #*的区间是0-无穷,惰性后s显示0次
print(res)
res=re.findall('as+?','wassssbewq') #+的区间是1-无穷,惰性后s显示1次
print(res)

第十:\用于把有功能的元字符变成普通的字符,使其失去功能。还有获取功能

\d相当于任意十进制数
\D相当于任意非数字字符
\s相当于空白字符
\S相当于非空白字符
\w相当于字母数字字符
\W相当于非字母数字字符
\b相当于任意特殊字符边界,比如空格,&,#等等

import re
res=re.findall('\d','12+(34+6-2*(2-1))')
print(res)
res=re.findall('\D','12+(34+6-2*(2-1))')
print(res)
#如果需要匹配斜杠使用四个斜杠
res=re.findall('c\\\\l','c\laa')
print(res)
#显示的时候会出现两个斜杠,但是没关系,只要能匹配成功就能正常使用判断

第十一:分组和或,search

import re
res=re.findall('as|b','wassssabewq')
print(res)
#可以看见此时的as和b是分开的,可以使用括号分组来解决这个问题
res=re.findall('a(s|b)','wassssabewq') #这里只显示了s和b,因为它优先显示组内的,其它不显示
print(res)
#可以用:?去优先级显示全部
res=re.findall('a(?:s|b)','wassssabewq') #这里只显示了s和b,因为它优先显示组内的,其它不显示
print(res)
#也可以用search来分组,但是search只能匹配一次
res=re.search('(?P<alpha>[a-z]+)(?P<number>\d+)','abcd123we2').group('number')
print(res)

第十二:match,只会从开始进行匹配

第十三:分割split

import re
res=re.split('[ |]','hello abc|asd')
print(res)

第十四:替换操作sub

import re
res=re.sub('\d','A','SD123FS23') #将里面的数字替换成A
print(res)
res=re.sub('\d+','A','SD123FS23')
print(res)

第十五:替换操作subn,并且计算出替换的次数

import re
res=re.subn('\d','A','SD123FS23') #将里面的数字替换成A
print(res)

第十六:通过编译来调用

import re
com=re.compile('\d+')
res=com.findall('sdadw234dsa13')
print(res)

第十七:放进迭代器

import re
res=re.finditer('\d+','sdadw234dsa13')
for i in res:
print(i)

10.logging模块,日志模块

import logging
#以下为日志级别
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')

以上显示的时候会发现只显示出了下面三行,因为默认阶级是warning级别
它只显示比warning更危险的级别的
可以按下面改变优先级

import logging
#以下为改变优先级
logging.basicConfig(
level=logging.DEBUG,
filename='日志文件', #把日志记录放进新建的日志txt
filemode='w', #写入模式,会覆盖之前的,永远都是五条,如果不写filemode追加
#模式,写入的日志记录会叠加
format='%(asctime)s %(lineno)d %(message)s' #时间 行号 日志内容
)
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
日志文件不仅向其他文件发送日志记录,还同时向当前的屏幕发送

import logging
logger=logging.getLogger()
logger.setLevel('DEBUG')
fh=logging.FileHandler('日志文件1')
ch=logging.StreamHandler()
fm=logging.Formatter('%(asctime)s %(message)s')
fh.setFormatter(fm)
ch.setFormatter(fm)
logger.addHandler(fh)
logger.addHandler(ch)
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')

11.configparse模块,生成配置文件

import configparser
config= configparser.ConfigParser()
config['DEFAULT']={'serve':'123.45.78:56654', #default为主键值
'name':'abcd' #name,serve子键值对
}
config['mod1']={}
topsecret=config['mod1'] #对空的进行添加操作
topsecret['serve']='111.15.178:2224'
topsecret['name']='kasading'
configfile = open ('configexmple.ini','w')
config.write(configfile)
configfile.close()
#——————查——————
config.read('configexmple.ini')
print(config.sections()) #注意,默认是不显示的
print(config.defaults()) #可以打印默认里面的内容
print('ss' in config) #可以判断某个字符串在不在congfig的主键值中
print('mod1' in config)
print(config['mod1']['serve']) #可以像字典一样取内部
print(config.get('mod1','serve'))#连续取值,和上面的那个一样
print(config.options('mod1'))
print(config.items('mod1'))
#——————增——————
config.add_section('m870') #增加主键
config.set('m870','serve','111.222.333:27015')
config.set('m870','name','sb1') #增加子键值对
configfile1 = open ('configexmple1.ini','w')
config.write(configfile1)
configfile1.close()
#——————删——————
config.remove_section('mod1') #删除主键
config.remove_option('DEFAULT','serve') #删除defaul下面的serve
configfile2 = open ('configexmple2.ini','w')
config.write(configfile2)
configfile2.close()

12.hashlib模块,摘要算法,用于明文变成密文

import hashlib
data=input("想要加密的数据")
data1='sb'+data #要在前面加上自己定制的字符,防止反解
obj=hashlib.md5(data1.encode('utf8')) #md5还可以换成SHA256,SHA384
print(obj.hexdigest())
#要验证密码准确性就使用密文互相比较

Py-re正则模块,log模块,config模块,哈希加密的更多相关文章

  1. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  2. Qt之分模块log

    说明 对于一般的log,使用 qInstallMessageHandler 重定向到文件即可,甚至可以根据日志等级,分类存储.但是并不是适用所有情况,比如,程序运行时动态创建模块,而每个模块需要创建不 ...

  3. SpringCloud创建Config模块

    1.说明 本文详细介绍Spring Cloud创建Config模块的方法, 基于已经创建好的Spring Cloud父工程, 请参考SpringCloud创建项目父工程, 创建Config模块这个子工 ...

  4. s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译

    时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...

  5. 模块与包&常用模块

    一.模块的使用 模块定义:一系列功能的集合体 分为三大类:1.自定义模块 2.内置模块(比如 time,os,sys) 3.第三方模块 模块的表现形式: 1.使用python编写的py文件 2.已被编 ...

  6. python基础语法13 内置模块 subprocess,re模块,logging日志记录模块,防止导入模块时自动执行测试功能,包的理论

    subprocess模块: - 可以通过python代码给操作系统终端发送命令, 并且可以返回结果. sub: 子    process: 进程 import subprocess while Tru ...

  7. Day5 模块及Python常用模块

    模块概述 定义:模块,用一砣代码实现了某类功能的代码集合. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,提供了代码的重用性.在Python中,一个.py文件就称之为一个模块(Mod ...

  8. Day6 模块及Python常用模块

    模块概述 定义:模块,用一砣代码实现了某类功能的代码集合. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,提供了代码的重用性.在Python中,一个.py文件就称之为一个模块(Mod ...

  9. Python模块:日志输出—logging模块

    1. logging介绍 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/ ...

  10. python学习之算法、自定义模块、系统标准模块(上)

    算法.自定义模块.系统标准模块(time .datetime .random .OS .sys .hashlib .json和pickle) 一:算法回顾: 冒泡算法,也叫冒泡排序,其特点如下: 1. ...

随机推荐

  1. matplotlib的学习16-animation动画

    from matplotlib import pyplot as plt from matplotlib import animation import numpy as np fig, ax = p ...

  2. Elasticsearch 学习二(请求流程).

    一.写入数据 1.ES 的任意节点都可以作为协调(Coordinating)节点接受请求(包括新建.索引或者删除请求),每个节点都知道集群中任一文档位置: 2.协调节点会通过 routing 字段计算 ...

  3. 【剑指offer】04 重建二叉树

    题目地址:重建二叉树 题目描述                                    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不 ...

  4. Linux工具包

    Linux的工具包 JDK 版本:14    百度网盘:链接: https://pan.baidu.com/s/1hWqGVmsElOCBufMuscPXzw  密码:st3y 安装步骤: 1.使用S ...

  5. Spring-Boot配置文件web性能(服务器)配置项(常用配置项为红色)

    参数 介绍 server.address 服务器应绑定到的网络地址 server.compression.enabled = false 如果启用响应压缩 server.compression.exc ...

  6. Cassandra与Kafka的集成

    Cassandra和Kafka经常一起用于微服务架构中.本文将介绍几种Cassandra和Kafka常见的集成模式.   简介   如果您的开发团队乐于接纳微服务架构的优点,那么您就会了解到,Kafk ...

  7. 在ubuntu上利用科大讯飞的SDK实现语音识别-语义识别等功能

    首先,参考科大讯飞的官方sdk中的案例,实现和机器的日常对话和控制. 具体步骤: 1. 通过麦克风捕获说话的声音,然后通过在线语音识别获取语音中的字符. 2. 将获取到的字符上传到科大讯飞的语义识别中 ...

  8. JAVA数据结构(十一)—— 堆及堆排序

    堆 堆基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,最坏,最好,平均时间复杂度都是O(nlogn),不稳定的排序 堆是具有以下性质的完全二叉树:每个节点的值都大于或等 ...

  9. Java学习日报7.15

    package oddor;import java.util.Scanner;public class Oddor{ public static void main(String args[]) { ...

  10. KafkaProducer 简析

    使用方式 KafkaProducer 发送消息主要有以下 3 种方式: Properties properties = new Properties(); properties.setProperty ...