Python之常用模块之re|time

作者: ropon 分类: Python 发布时间: 2018-10-12 21:33
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/10/11 16:36
# @Author  : Ropon
# @File    : 17_01.py

import re

#findall 匹配所有,返回一个列表,其中是所有匹配的元素
# ret = re.findall('\d+', '测试正159则中数字258')
# ret = re.findall('\d', '测试正159则中数字258')
# print(ret)

# search 只匹配从左到右的第一个,得到不是直接结果,需要通过变量的group方法获取
# ret = re.search('[a-z]+', '测试正159则中数字aw258')
# print(ret)
# print(ret.group())

# # match 以什么开头开始匹配,相当于search中正则表达式加^,得到不是直接结果,需要通过变量的group方法获取
# ret = re.match('\d+', '1258测试')
# # ret = re.search('\d+$', '测试1258')
# print(ret)
# print(ret.group())

# 字符串处理扩展:替换、切割
# split
# s = 'ropon|luo|peng'
# print(s.split('|'))
# s = 'ropon88peng68luo28'
# ret = re.split('\d+', s)
# print(ret)

# sub 将匹配到的元素替换成新字符
# ret = re.sub('\d+', 'R', 'AbcR123测试1258')
# print(ret)

# subn 将匹配到的元素替换成新字符,返回的是一个元组,第二个参数是替换次数
# ret = re.subn('\d+', 'R', 'AbcR123测试1258')
# print(ret)

# compile
# 使用正则时,先将正则表达式编译成字节码,使用compile,先编译,多次使用不会多次编译
# ret = re.compile('\d+')
# print(ret)
# res = ret.findall('AbcR123测试1258')
# print(res)
# res = ret.search('AbcR123测试1258')
# print(res.group())

# finditer
# 返回的是迭代器,所有结果在迭代器中,通过循环及便利的group方法取值,可节省内存
# ret = re.finditer('\d+', 'AbcR123测试1258')
# for i in ret:
#     print(i.group())

# 总结
# findall 查找所有匹配项,返回的是列表
# search 从左到有匹配,匹配到就返回变量,通过group取匹配的第一个值,不匹配就返回None,group会报错
# match 相当于在search中正则表达式前加^,意思以什么开头
# spilt 按正则切割,匹配到的内容会被删除,返回的是列表
# sub/subn 替换,按正在查找替换,返回替换后的内容,subn返回的是元组,第二个值是替换次数
# compile 先编译正在表达式,用编译后的结果去执行findall、search、match、finditer,可提高效率,节省时间
# finditer 返回的是迭代器,所有结果在迭代器中,通过循环及便利的group方法取值,可节省内存


# s = '<html><head><title>正则标题测试</title></head><body>正文测试<b>加粗</b></body></html>'
# ret = re.search('<title>(\w+)</title>', s)
# ret = re.search('<(\w)>(\w+)</(\w)>', s)
# ret = re.search('<(\w+)>(\w+)</(\w+)>', s)
# print(ret.group())

# 使用findall能顺利取到分组中的内容,有一个特殊的语法 >(正则表达式)<
# s = '<html><head><title>正则标题测试</title></head><body>正文测试<b>加粗</b></body></html>'
# ret = re.findall('(\w+)' ,s)
# ret = re.findall('>(\w+)<' ,s)
# print(ret)

# ret = re.findall('\d+(\.\d+)?', '8.0812*6')
# print(ret)

# 取消分组优先 (?:正则表达式)
# ret =re.findall('\d+(\.\d+)', '8.288.a8')
# print(ret)
#返回分组匹配的内容
# ret =re.findall('\d+(?:\.\d+)', '8.288.a8')
# print(ret)
#返回匹配的内容

# 分组,对于正则表达式,表示整体出现的次数 ()
# (\.[\w]+)? (\.(/w+))?
# s = '123.ab456'
# ret = re.findall('\.[\w]+', s)
# print(ret)
# ret = re.findall('\.(?:\w+)', s)
# ret = re.findall('\d+(?:\.[\w]+)?', s)
# print(ret)

# Python中分组可帮您精确找到您真正所需内容
# <(\w+)>(\w+)</(\w+)>
# s = '<html>bb<head>aa<title>测试标题</title></head><body>33</body></html>'
# ret = re.findall('<(\w+)>(\w+)</(\w+)>' ,s)
# print(ret)

# split
#注意:正则表达式加()分组,保留分割后的元素同时也保留匹配元素
# ret = re.split('\d+', 'ropon8luo68peng282peng')
# # ret = re.split('(\d+)', 'ropon8luo68peng282peng')
# print(ret)

#Python与正则特殊约定
# 分组命名 自定义名称
# (?P<组的名字>正则表达式)
# 后向引用
# (?P=组的名字)

# s = '<a>wa21haha</a>'
# ret = re.search('(?P<con>\d+)',s)
# print(ret.group(1))
# print(ret.group('con'))

# s = '<a>wahaha</a>'
# pattern = '<(?P<tab>\w+)>(\w+)</(?P=tab)>'
# ret = re.search(pattern, s)
# print(ret.group())
# print(ret.group(1))
# print(ret.group(2))
# print(ret.group(3))
# print(ret.group(1) == ret.group(3))

# s = '<a>wahaha</a>'
# pattern = '<(?P<tab>\w+)>(\w+)</(?P=tab)>'
# ret = re.search(pattern, s)
# print(ret.group(2))

# time模块
import time

# 常用方法
# 延时,单位秒
# time.sleep(secs)

# time.sleep(3)
# print("test")

# 获取当前时间戳
# time.time()

# a = time.time()
# print(a)

# Python中三种方式表示时间:时间戳、元组、格式化时间字符串
# 1、时间戳:返回的float类型
# print(type(time.time()))
# 2、格式化时间字符串
# %y 2位数年份 18
# %Y 4位数年份 2018
# %m 月份 10
# %d 月中某天 12
# %H 小时[24小时制] 16
# %I 小时[12小时制] 04
# %M 分钟 05
# %S 秒 23
# %a 本地简化星期名称 Fri
# %A 本地完整星期名称 Friday
# %b 本地简化月份名称 Oct
# %B 本地完整完整名称 October
# %c 本地相应的日期和时间表示 Fri Oct 12 16:06:40 2018
# %j 年内的一天 285
# %p 本地AM或PM PM
# %U 一年中的星期数,星期天为星期的开始 40
# %w 星期(0-6),星期天为星期的开始 5
# %W 一年中的星期数,星期一为星期的开始 41
# %x 本地相应日期表示 10/12/18
# %X 本地相应时间表示 16:08:31
# %Z 当前时区名称
# %% %号本身

# 2018-10-12
# print(time.strftime("%Y-%m-%d"))
# 2018.10.12
# print(time.strftime("%Y.%m.%d"))
# 2018 10 12
# print(time.strftime("%Y %m %d"))
# 15:57:27
# print(time.strftime("%X"))

# 3、元组 struct_time元组共有9个元素 年,月,日时,分,秒,一年中第几周,一年中第几天,

# 总结:时间戳是计算机能识别的时间;时间字符串是人能看懂的时间;元组是用来操作时间的

 

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!