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 =====》时,分,秒

 

评论关闭