1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
| #!/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 = 'roponluopeng' # 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个元素 年,月,日时,分,秒,一年中第几周,一年中第几天,
# 总结:时间戳是计算机能识别的时间;时间字符串是人能看懂的时间;元组是用来操作时间的
|