Python 正则表达re模块compile+findall的组合应用实例

Python 正则表达re模块compile+findall的组合应用实例,第1张

Python 正则表达re模块compile+findall的组合应用实例

如有错漏,敬请指教~

一、目的

用log文件记录了信息格式如下:
Epoch:[27/50] train accuracy=0.93079 train loss=0.20142 test accuracy=0.89019 test_loss=0.38094

想把当前epoch数,还有accuracy和loss的值都取出来

二、用到的模块和函数简介 re模块:

import re
re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。

re.compile()

re.compile()是用来优化正则的,它将正则表达式转化为对象.
compile(pattern, flags=0)
pattern : 一个字符串形式的正则表达式
flags : 可选,表示匹配模式,比如忽略大小写,多行模式等
re.compile()生成的是正则对象,单独使用没有任何意义,需要和findall(), search(), match()搭配使用

pattern.findall()

re.compile()结合findall(),返回一个列表

三、实际例子

一个简单的例子

test_string='a\kk\cc'
print(test_string) #输出akk\cc,python对字符需要转义
#每次输入地址也要加转义字符

# 加一个r【r是原始字符的简写:raw string】,就表示废掉python中''的转义能力。
u=re.compile(r'\') #等价于re.compile('\\')
#可以这么理解:现在添加的r限制了引号的''没有转义能力,但是python存储时必须在文本''前添加转义字符'',所以存储的形式为re.compile('\\')

# .findall:返回string中所有与pattern匹配的全部字符串,返回形式为数组。
z=u.findall(test_string)
print(z)#['\']
print(str(*z)) #\

为完成第一部分的目的,代码如下:

test_string3='Epoch:[27/50]	 train accuracy=0.93079	 train loss=0.20142	 test accuracy=0.89019	 test_loss=0.38094'
pattern = re.compile(r'Epoch:[([dd]+)+/50]	 train accuracy=([d.]+)	 train loss=([d.]+)	 test accuracy=([d.]+)	 test_loss=([d.]+)')
z=pattern.findall(test_string3)

其中pattern和z 存储的值分别如下:

pattern=re.compile('Epoch:\[([\d\d]+)+/50\]t train accuracy=([\d\.]+)t train loss=([\d\.]+)t test accuracy=([\d\.]+)t test_loss=([\d\.]+)')
z=[('27', '0.93079', '0.20142', '0.89019', '0.38094')]

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5480515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存