本篇依旧是我在公司给同事培训的内容,与上一篇类似,不过本篇会内容偏简单,会多讲两种。一起看看;
数据
datas = """ [16:45:18]2 [16:45:18]# cap: 13, 12, 11 [16:45:18]cap: 13, 12, 11 [16:45:18]cap: 13, 12, 11 [16:45:18]cap: 13, 12, 11 """
数据,不仅限于这样,这样的数据一般都是来自日志,那么如果是实时的话,就是一行一行的了。
前言
同样使用正则,不过本篇还会涉及其他内容,也就是上面所说的实时数据,怎么处理拿到对应的值。
需求:拿到cap: 13, 12, 11最后一个11,其他数据一样,都只需要最后一个","后面位置的数字数据
使用正则匹配
方式一
import re values = re.findall(".*cap:(.*)",datas) for value in values: print(value.split(",")[-1].strip())
这种就不多介绍了,上一节的内容。可以去看看
方式二
values = re.findall(r"\b\d+$",datas,re.M) print(values)
这里就用到了两个新的知识点了。\b跟
。寻找某个字符开头的的字符。"$":匹配特定字符的结尾re.M:一般与美元符号跟插入符号一起使用,匹配字符串开头的模式和每个换行符的开头内容
看个简单的例子,理解一下re.M
import re nums = """aa an anan annaan anananqingan qinganan qingaaaaaaan anqingan""" res = re.findall('^a',nums,flags=re.M) res1 = re.findall('^a',nums) print(res) print(res1) """ ['a', 'a', 'a', 'a', 'a', 'a'] ['a'] """
这样不好的地方就是会将数据中的"2"匹配出来,需要再次做一次处理。
方式二衍变
values = re.findall(r"[\d+]\d+$",datas,re.M) print(values)
字符串处理
values = datas.strip().splitlines() for value in values: if "," in value: print(value.split(",")[-1].strip())
这里用到了一个不是很常用的方法,splitlines多行分割,跟split有异曲同工之妙。这里将所有数据分割成列表,然后循环,判断,再分割取值,最后得到最后一个,之后的数据。