正则表达式之re模块

re.findall用法(重要)

re.findall( '正则表达式' , '待匹配的字符' )

找出所有的目标字符,用列表的形式展现,如果找不到返回空列表.

import re

 re.findall('正则表达式','带匹配的文本')  # 根据正则匹配除所有符合条件的数据
res = re.findall('a','eva jason jackson')
print(res) # ['a', 'a', 'a'] 结果是一个列表(要么有元素 要么空列表)

re.search用法(重要)

re.search( '正则表达式' , '待匹配的字符' )

寻找第一个,找到后就停止, 找不到就返回None

用group ( ) 来查看 没有值就报错

res = re.search('正则表达式','带匹配的文本')  # 根据正则匹配到一个符合条件的就结束
res = re.search('a','eva jason jackson')
print(res) # 结果对象
print(res.group()) # a
if res:
print(res.group())
else:
print('不好意思 没有找到')
"""如果没有符合条件的数据 那么search返回None 并且使用group会直接报错"""

re.math用法(重要)

只找开头的,如果开头不是,就返回None

用group ( ) 来查看, 没有值就报错

res = re.match('a','abac')  # 根据正则从头开始匹配(文本内容必须在开头匹配上)
print(res) # 结果对象
print(res.group()) # a

re.compile用法(重要)

instead = re.compile('.*n\d')
res = instead.findall('eva3jason4yuan4')
print(res) # ['eva3jason4yuan4']

re.finditer用法(重要)

res = re.finditer('\d+', 'ashdklah21h23kj12jk3klj112312121kl131')
print([i.group() for i in res]) # ['21', '23', '12', '3', '112312121', '131']

无名分组与有名分组(重要)

# findall针对分组优先展示   无名分组
res = re.findall("^[1-9]\d{14}(\d{2}[0-9x])?$",'110105199812067023')
print(res) # ['023']
# 取消分组优先展示 无名分组
res1 = re.findall("^[1-9](?:\d{14})(?:\d{2}[0-9x])?$",'110105199812067023')
print(res1) # 有名分组
res = re.search('^[1-9](?P<xxx>\d{14})(?P<ooo>\d{2}[0-9x])?$','110105199812067023')
print(res)
print(res.group()) # 110105199812067023
print(res.group(1)) # 10105199812067 无名分组的取值方式(索引取)
print(res.group('xxx')) # 10105199812067
print(res.group('ooo')) # 023

re模块其他方法

import re
# 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
res = re.split('[ab]','abcd')
print(res) # ['', '', 'cd'] # 类似于字符串类型的replace方法
res = re.sub('\d','H','eva3jason4yuan4',1) # 替换正则匹配到的内容
res = re.sub('\d','H','eva3jason4yuan4') # 不写默认替换所有
print(res) # evaHjason4yuan4 """返回元组 并提示替换了几处"""
res = re.subn('\d','H','eva3jason4yuan4',1)
print(res) # ('evaHjason4yuan4', 1)
res = re.subn('\d','H','eva3jason4yuan4')
print(res) # ('evaHjasonHyuanH', 3)

collections模块

1.namedtuple(具名元组)

    from collections import namedtuple

    """
namedtuple('名称',[名字1,名字2,...])
namedtuple('名称','名字1 名字2 ...')
"""
point = namedtuple('坐标', ['x', 'y'])
res = point(11, 22)
print(res) # 坐标(x=11, y=22)
print(res.x) # 11
print(res.y) # 22
point = namedtuple('坐标', 'x y z')
res = point(11, 22, 33)
print(res) # 坐标(x=11, y=22, z=33)
print(res.x) # 11
print(res.y) # 22
print(res.z) # 33

2.队列

    # 队列模块
import queue # 内置队列模块:FIFO
# 初始化队列
q = queue.Queue()
# 往队列中添加元素
q.put('first')
q.put('second')
q.put('third')
# 从队列中获取元素
print(q.get())
print(q.get())
print(q.get())
print(q.get()) # 值去没了就会原地等待

3.双端队列

    from collections import deque
q = deque([11,22,33])
q.append(44) # 从右边添加
q.appendleft(55) # 从左边添加
print(q.pop()) # 从右边取值
print(q.popleft()) # 从做边取值

4.有序字典

    normal_dict = dict([('name', 'jason'), ('pwd', 123), ('hobby', 'study')])
print(normal_dict)
{'hobby': 'study', 'pwd': 123, 'name': 'jason'}
from collections import OrderedDict
order_dict = OrderedDict([('name', 'jason'), ('pwd', 123), ('hobby', 'study')])
print(order_dict)
OrderedDict([('name', 'jason'), ('pwd', 123), ('hobby', 'study')])
order_dict['xxx'] = 111
order_dict
OrderedDict([('name', 'jason'), ('pwd', 123), ('hobby', 'study'), ('xxx', 111)])
normal_dict['yyy'] = 222
normal_dict
{'hobby': 'study', 'pwd': 123, 'yyy': 222, 'name': 'jason'}

5.默认值字典

 from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = defaultdict(list)
for value in values:
if value>60:
my_dict['k1'].append(value)
else:
my_dict['k2'].append(value)
print(my_dict)

6.计数器

time模块

时间三种表现形式

1.时间戳(秒数)
2.结构化时间(一般是给机器看的)
3.格式化时间(一般是给人看的)
三种时间是可以相互转换的!!!

1.time.sleep()  # 原地阻塞指定的秒数
2.time.time() # 获取时间戳时间

1.格式化时间

 print(time.strftime('%Y-%m-%d'))  # 2021-11-25
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2021-11-25 11:48:34
print(time.strftime('%Y-%m-%d %X')) # 2021-11-25 11:48:34

更多的时间符号

2.结构化时间

datetime模块

import datetime
print(datetime.date.today()) # 2021-11-25 没有具体时间
print(datetime.datetime.today()) # 2021-11-25 12:15:11.969769
"""date年月日 datetime年月日时分秒 time时分秒(MySQL django后期可以)"""
res = datetime.datetime.today()
print(res.year) # 2021
print(res.month) # 11
print(res.day) # 25
print(res.weekday()) # 获取星期(weekday星期是0-6) 0表示周一
print(res.isoweekday()) # 获取星期(weekday星期是1-7) 1表示周一
"""时间差(timedelta)"""
ctime = datetime.datetime.today()
time_tel = datetime.timedelta(days=3)
print(ctime) # 2021-11-25 12:20:48.570489
print(ctime - time_tel) # 2021-11-22 12:21:06.712396
print(ctime + time_tel) # 2021-11-28 12:21:06.712396
"""
日期对象 = 日期对象 +/- timedelta对象
timedelta对象 = 日期对象 +/- 日期对象
"""
ret = ctime + time_tel
print(ret - ctime) # 3 days, 0:00:00
print(ctime - ret) # -3 days, 0:00:00

最新文章

  1. 美化radio和checkbox样式
  2. /proc 【虚拟文件系统】
  3. 日本DARTS 支撑的一系列应用项目
  4. Microsoft Azure News(2) 在Microsoft Azure上运行SAP应用程序
  5. OS实验一实验报告
  6. 简单的IOS6和IOS7通过图片名适配
  7. Excel 代码
  8. eclipse插件开发(一)
  9. Storages and virtual servers
  10. GridView合并多行列值
  11. Python数据分析(二): Pandas技巧 (1)
  12. Prim算法模板
  13. 爬虫免登录进入github
  14. maomao的现在与未来
  15. Django框架---- 信号
  16. Django models 常用数据类型
  17. Java内存泄露处理
  18. :策略模式--Duck
  19. oracle count 大表
  20. Kali Linux渗透测试实战 2.1 DNS信息收集

热门文章

  1. ArcMap线上均匀生成点
  2. ZYNQ 双CPU裸机运行例程
  3. Nginx 陷阱和常见错误
  4. 4月19日 python学习总结 套接字模块的使用
  5. 3、Lambda表达式
  6. VUE常见问题
  7. manjaro下使用scrcpy安卓设备投屏
  8. Prometheusbu部署使用-1
  9. 序列化接口的id有什么用?
  10. Oracle :value too large for column &quot;SCHEMA&quot;.&quot;TABLE&quot;.&quot;COLUMN&quot; (actual: 519, maximum: 500)的解决方案