python字符串查找匹配_python 字符串的匹配与查找
在日常工作中,尤其是根据日志定位,我们常常需要手动搜索大量的关键字符串,进行问题定位。第一次可能是技术的学习,那么从第二次开始,就开始是大量的体力劳动,遵循凡事重复的体力劳动,都交给python的原则,我们可以利用python把我们需要的字符串都找出来,避免纯手工操作。
1、正则表达式
正则表达式,几乎是计算机领域绕不过去的一种手段了,毕竟机器并不是人,比如人看到100-109这些自然会认为是数值。并且满足:
1)它是三位数。
2)它大于等于100,并且小于等于109。
但是在机器的眼里,它并没有这些意义,如果从存储的角度看,所有的在计算机的内容都是二进制的1和0。之所以我们能在文本里面看到100,101,102,...,109。是因为我们将这些二进制进行了再翻译,这种过程叫做编码。
所以如何让程序知道,你要找的是东西呢?
比如说上面的例子,我们要找的100-109这个范围的数值,一种最简单的方法是把这10个数每次遍历一遍文本找到,但是当我们扩大范围呢10000-99999,找的这个范围内的数值,每个数字都进行遍历显然是不太现实的。
这时我们可以用正则定义一个规则“\d\d\d”,它告诉计算机,我们要寻找一个三位数字的字符串。但是这样的三位数是很多的,如何找的100到109范围内的整数呢。可以观察到100到109,它们的第一位数都是1,第二位是0,第三位则是取0-9任意值。于是我们只要限定这三位的取值,就可以找的对应的字符串了----》“10[0-9]”
[0-9]就是一种通配符的表达,它表示这里可以取0-9的任意值。
事实上正则表达式远没有这么简单,确切的说,它因为不同需求,复杂程度也是不同的。学习正则表达式,可以参考下面链接的资料:
2、python的re 模块
re是python内嵌的,用于匹配正则表达式的模块,因此,可以直接引用re的模块来运用正则表达式查询我们想要的内容。
re模块内部集成了很多方法,这里只简单介绍几种比较常用的方法。
1)findall
re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。
格式:
re.findall(pattern, string, flags=0)
pattern: 编译时用的表达式字符串。
flags 编译标志位,用于修改正则表达式的匹配方式,如:是否区分大小写,多行匹配等。常用的flags有:
例如我们要找的字符串中的102。
运行结果:
2)compile
编译正则表达式模式,返回一个对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。)
格式:
re.compile(pattern,flags=0)
那么上面的例子,我们还可以这么写:
re还提供了很多方法用于更方便的查找字符串,这里不再一一详细叙述。
好了,我们现在实现这样一个小项目,工作中,你的领导需要你将日志log.log中所有101-109的数值,查找出来。那么你应该怎么做呢?
1)正则表达式可以用“10[0-9]”表示
2)利用re把log.log中满足要求的内容查找出来。
log.log内容如下:
简化代码如下:
运行结果如图:
正则+python 可以帮助你实现更多有趣的内容。查找匹配字符串的技能几乎在python中无处不在,这将有助于你更好的用python帮助自己解决问题,从繁复的体力查找中抽出时间,进行更有意义的思考。