0
点赞
收藏
分享

微信扫一扫

Python-正则表达式(给同事培训篇)


本篇是我在公司给同事培训的内容,大致内容都会写出来,但是,写文总是没有在现场说的那么多,所以,则重编写。

前言

本篇意在使得同事学会基本是正则表达式,因为后续可能会需要给定框架后,自己编写正则表达式。所以本篇是理论+实战。

数据源(内部日志数据,截取一部分讲):

...
[13:52:44]<batterry>
[13:52:44]vol    : 10327 mv
[13:52:44]cur    : 4344 ma
[13:52:44]cap    : 25 %
[13:52:44]tpwr   : 44.86 w
[13:52:44]<motor>
...

需求

我有N个这样的数据源,我只需要与之间的的cap对应的25。

在这个需求之前,为了不那么抽象化,在之后还有很多其他的数据例如,在之前还有很多其他数据,例如也就是说,正确的数据源其中的片段应该是:

[13:52:44]<fruits>
[13:52:44]apple  : 11111 mv
[13:52:44]banana : 22222 mv
[13:52:44]vol    : 10327 mv
[13:52:44]<batterry>
[13:52:44]vol    : 10327 mv
[13:52:44]cur    : 4344 ma
[13:52:44]cap    : 25 %
[13:52:44]tpwr   : 44.86 w
[13:52:44]<motor>
[13:52:44]bird   : 999999 w 
[13:52:44]monkey : 888888
[13:52:44]tpwr   : 44.86 w
[13:52:44]<animals>

但是真正的数据源是有N多个这样的片段组成,我需要拿到我需要的数据。怎么做?

思路

首先,我需要用什么库,这里默认re正则表达式。那么我怎么匹配?
1、标志位,也就是我需要告诉正则表达式,我从什么地方开始
2、结束位,也就是告诉正则表达式,我需要在什么位置结束。
3、表达式,怎么写,能保证我的正则的健壮性,以及准确性。

在这之前,肯定是先要可以将数据拿出来。

操作

首先我先将做为开始结束,进行匹配,然后将得到的结果再次处理,拿到cap的对应的值。

第一步

import re

values = """
[13:52:44]<fruits>
[13:52:44]apple  : 11111 mv
[13:52:44]banana : 22222 mv
[13:52:44]vol    : 10327 mv
[13:52:44]<batterry>
[13:52:44]vol    : 10327 mv
[13:52:44]cur    : 4344 ma
[13:52:44]cap    : 25 %
[13:52:44]tpwr   : 44.86 w
[13:52:44]<motor>
[13:52:44]bird   : 999999 w 
[13:52:44]monkey : 888888
[13:52:44]tpwr   : 44.86 w
[13:52:44]<animals>
  """
  
data = re.findall("<batterry>(.*)<motor>", values, re.S)

第二步

知道自己需要匹配的数据有哪些后,就需要写对应的正则了,也需要分析一下匹配策略。

"\s" 匹配空白字符
"\d" 匹配数字字符
"."  匹配任意字符
"*"  匹配0个活多个字符
""  转义,匹配特殊字符
"()" 将所需要的数据单独匹配出来

for key in data:
    volValue = re.findall("\[(.*)\]({})\s*:\s*(\d*)".format("cap"), key)

这里就已经将值都拿出来了,接下来就是为后续做准备,写入CSV还是excel还是做图。都需要组合数据。

第三步

我写的是字典嵌套列表,所以,直接看代码:

volDict = {}
timeList = []
valueList = []

for value in volValue:
    timeList.append(value[0])
    valueList.append(value[2])

volDict["time"] = timeList
volDict["vol"] = volValue[0][1]
volDict["value"] = valueList
print(volDict)

这样就能拿到对应的数据了,这里还匹配了时间戳,这是必不可少的环节。

本章就到这了,期待后续~

举报

相关推荐

0 条评论