python re正则表达式学习

正则表达式实战
本文详细介绍了正则表达式在Python中的应用,包括re模块的主要函数match、search、sub及compile的使用方法,并通过实例展示了如何处理日期格式的字符串。

有需求把类似 世界时 ‘2019-06-06-00’ 与北京时 ‘2019/06/06 08:00’ 这样的进行匹配

虽然可以if else + 索引去改,但是刚好想学一下正则表达式,就记录一下

re.match(pattern, string, flags=0)

参数描述
pattern匹配的正则表达式
string要匹配的字符串。
flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

 

 

 

 

 

dateOne = r'2019/06/06 08:00'
s1 = re.match(r'2.*9',dateOne) 
print(s1.span())
print(s1.group())
s2 = re.match(r'08:00',dateOne) 
print(s2)

输出:
(0, 4)
2019
None

re.search(pattern, string, flags=0)

参数同re.match()

dateOne = r'2019/06/06 08:00'
s1 = re.search(r'2.*9',dateOne) 
print(s1.span())
print(s1.group())
s2 = re.search(r'08:00',dateOne) 
print(s2.span())
print(s2.group())

输出:
(0, 4)
2019
(11, 16)
08:00

可以看到,re.match()只能从开头开始匹配,re.search()会搜索整个字符串,返回匹配结果。

re.sub(pattern, repl, string, count=0, flags=0)

参数描述
pattern正则中的模式字符串
repl替换的字符串,也可为一个函数
string要被查找替换的原始字符串
count模式匹配后替换的最大次数,默认 0 表示替换所有的匹配

 

 

 

 

 

 

如果 repl 是一个字符串的话:

dateOne = r'2019/06/06 08:00'
s = re.sub(r'/','-',dateOne)
print(s)

输出:
2019-06-06 08:00

如果repl是一个函数:

dateOne = r'2019/06/06 08:00'
s = re.sub(r'/','-',dateOne)
print(s)

def transform(matched):
    if matched.group() == ' 08:00':
        return '-00'
    elif matched.group() == ' 20:00':
        return '-12'
    else:
        return 'None'

s = re.sub(r' 08:00',transform,s)
print(s)

输出:
2019-06-06 08:00
2019-06-06-00


re.compile(pattern[, flags])

用于编译正则表达式,生成一个正则表达式( Pattern )对象

dateOne = r'2019/06/06 08:00'
pattern = re.compile(r'2019.*?6')
s1 = pattern.match(dateOne).group()
print(s1)
s2 = pattern.search(dateOne).group()
print(s2)
s3 = pattern.findall(dateOne)
print(s3)

输出:
2019/06
2019/06
['2019/06']

关于group()的一些用法:

dateOne = r'2019/06/06 08:00'
pattern = re.compile(r'(\d*)/(\d*)/(\d*) (\d*):(\d*)')
s1 = pattern.match(dateOne)
print(s1.group(0))
print(s1.group(1))
print(s1.group(2))
print(s1.group(3))
print(s1.group(4))
print(s1.group(5))

输出:
2019/06/06 08:00
2019
06
06
08
00
关于groupdict的一些用法:
dateOne = r'2019/06/06 08:00'
pattern = re.compile(r'(?P<YYYY>\d*)/(?P<MM>\d*)/(?P<DD>\d*) (?P<hh>\d*):(?P<mm>\d*)')
s1 = pattern.match(dateOne)
print(s1.groupdict())

dateOne = r'2019/06/06 08:00'
s1 = re.match(r'(?P<YYYY>\d*)/(?P<MM>\d*)/(?P<DD>\d*) (?P<hh>\d*):(?P<mm>\d*)',dateOne)
print(s1.groupdict())

输出:
{'YYYY': '2019', 'MM': '06', 'DD': '06', 'hh': '08', 'mm': '00'}
可以看到用(?P<key>value)和groupdict()可以直接生产字典格式,很方便

修饰符、表达式模式等可以参考:

【1】https://www.runoob.com/python/python-reg-expressions.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值