python正则表达式
正则定义:用一些特殊字符去字符串中匹配我们想要的数据
字符组
正则
|
说明
|
[0123456789]
|
匹配0-9里面 的任意一个 |
[0-9] | 匹配0-9里面 的任意一个 |
[A-Z] | 匹配A-Z里面 的任意一个 |
[a,z] | 匹配a-z里面 的任意一个 |
[0-9a-zA-Z] | 匹配数字,大小写形式的a-z |
字符
元字符 |
匹配内容 |
. |
匹配除换行符以外的任意字符 |
\w |
匹配字母或数字或下划线 |
\s |
匹配任意的空白符 |
\d |
匹配数字 |
\n |
匹配一个换行符 |
\t |
匹配一个制表符 |
\b |
匹配一个单词的结尾 |
^ |
匹配字符串的开始 |
$ |
匹配字符串的结尾 |
\W |
匹配非字母或数字或下划线 |
\D |
匹配非数字 |
\S |
匹配非空白符 |
a|b |
匹配字符a或字符b |
() |
匹配括号内的表达式,也表示一个组 |
[...] |
匹配字符组中的字符 |
[^...] |
匹配除了字符组中字符的所有字符 |
量词
1 量词不能单独使用
2 必须搭配表达式使用,只能影响前面的一个字符
量词 | 用法 |
* | 重复零次或者多次 |
+ | 重复一次或者多次 |
? | 重复零次或者一次 |
{n} | 重复n次 |
{n,} | 重复n次到更多次 |
{n,m} | 重复n到m次 |
分组()或者| 【^】
正则 | 用法说明 |
^[1,9]\d{13,16}[0-9x]$ | 匹配一个以1-9开头,13-16位,并且以0-9或者x结尾的字符 |
^[1-9]\d{13,16}[0-9x]$ |
1101011980010170 |
^[1-9]\d{14}(\d{2}[0-9x])?$ |
匹配一个以1-9开头长度为14位,惰性匹配随机0-9或者x中匹配0-1位 |
^([1-9]\d{16}[0-9x]|[1-9]\d{14})$ |
匹配一个以1-9开头长度为16位,0-9或者或前面是1-9长度为14位的字符 |
贪婪匹配和非贪婪匹配
贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配
非贪婪匹配:*? 重复任意次,但尽可能少重复 +? 重复1次或更多次
取消贪婪匹配:非贪婪匹配就是尽可能少匹配
转义符(\)
比如\n,\s,具有特殊意义的元字符,我们想要对他进行转义1 \\n,\\s 2 r"\n",r"\s"
r===>转义字符
.*?的用法
. 是任意字符
* 是取0到+无穷长度
? 是非贪婪匹配
如:.*?x ====。取前面任意长度的字符,直到第一个x出现
内置模块-->re模块
使用方法===》import re
注意事项:1 如果匹配到了,就返回匹配到的结果,并且是列表形式
2 如果匹配不到,返回【】,并没有报错
用法
findall
ret=re.findall("hhh","hhhaaacccddd") print(ret)
说明:第一个是正则,第二个是字符
search
ret=re.search("hhh","hhhaaacccddd") l=ret.group()# 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。 print(l)
match
ret = re.match('a', 'abc').group() # 同search,不过尽在字符串开始处进行匹配 print(ret) #结果 : 'a'
split
ret = re.split('[ab]', 'abcd') # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割 print(ret) # ['', '', 'cd']
sub
ret = re.sub('\d', 'H', 'eva3egon4yuan4', 1)#将数字替换成'H',参数1表示只替换1个 print(ret) #evaHegon4yuan4
subn
ret = re.subn('\d', 'H', 'eva3egon4yuan4')#将数字替换成'H',返回元组(替换的结果,替换了多少次) print(ret)
了解
import re ret = re.finditer('\d', 'ds3sy4784a') #finditer返回一个存放匹配结果的迭代器 print(ret) # <callable_iterator object at 0x10195f940> print(next(ret).group()) #查看第一个结果 print(next(ret).group()) #查看第二个结果 print([i.group() for i in ret]) #查看剩余的左右结果
时间模块
模块使用===》import time
基本语法
1 time.time()时间戳
2 time.sleep()推迟指定的时间运行。单位为秒
时间的表示
1 时间戳(timesteamp)
2 结构化时间
3 格式化时间
python中时间日期格式化符号(strftime)
%y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身
结构化时间(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
索引(Index) |
属性(Attribute) |
值(Values) |
0 |
tm_year(年) |
比如2011 |
1 |
tm_mon(月) |
1 - 12 |
2 |
tm_mday(日) |
1 - 31 |
3 |
tm_hour(时) |
0 - 23 |
4 |
tm_min(分) |
0 - 59 |
5 |
tm_sec(秒) |
0 - 60 |
6 |
tm_wday(weekday) |
0 - 6(0表示周一) |
7 |
tm_yday(一年中的第几天) |
1 - 366 |
8 |
tm_isdst(是否是夏令时) |
默认为0 |
三种时间之间的转换
datetime模块
语法====》import datetime
用法
1 自定义日期
import datetime ret =datetime.date(2222,2,2) print(ret)
获取当前日期
ret=datetime.datetime.now() print(ret)
查看距离某一个时间还有多久
ret=datetime.datetime.now() l_time=datetime.timedelta(days=90,hours=17,minutes=55,milliseconds=445) print(ret-l_time)
UTC时间
ret=datetime.datetime.utcnow() print(ret)
总结
datetime====>年,月,日,时,分,秒
date =====>年,月,日
time =====》时,分,秒