Python字符串的匹配和搜索

如果你想匹配或者搜索特定的字段的时候,如果你匹配的是相对比较简单的字符串的时候你只需要利用、、、等类似的方法即可,示例如下:

对于复杂的匹配我们就要使用正则表了,那既然用到正则的话我们就得利用模块的方法了。为了解释正则表达式的基本使用,我们假设要匹配数字格式的字符串比如: ,示例如下:

如果你想使用同一个模式去做多次匹配,那你应该先将模式字符串预先编译为模式对象,然后再去做匹配,示例如下:

方法的查找是从头开始去做完全匹配的,如果你想查找到字符串任意位置出现的匹配模式,并且希望得到结果,你可以使用去替代,示例如下:

如上所示就把字符串中,你要的结果都找到了,并且默认输出是一个列表,如果没有匹配到任何内容,默认返回一个空列表。

在定义正则的时候,通常会利用括号去做捕获分组,比如:

捕获分组之后可以使得后面的处理更加简单,因为可以分别将每个组的内容提取出来,示例如下:

方法会搜索文本并以列表形式返回所有的匹配。 如果你想以迭代方式返回匹配,可以使用 方法来代替,比如:

总结

上面主要讲解了一下利用模块进行字符串的匹配和搜索的基本用法,核心方法就是先使用编译你想匹配的正则表达式字符串内容,然后再使用,和方法的结合使用。

当你编写正则表达式的时候,低昂对普通的做法是使用原始字符串,比如: 。这种字符串将不去解析反斜杠,这在正则表达式中是很有用的。 如果不这样做的话,你必须使用两个反斜杠,类似 。

需要注意的是方法仅仅检查字符串的开始部分。它的匹配结果有可能并不是你期望的那样精确,如果你想精确匹配,确保你的正则表达式以$结尾,就像这么这样:

最后,如果你仅仅是做一次简单的文本匹配/搜索操作的话,可以略过编译部分,直接使用 re 模块级别的函数。比如:

但是需要注意的是,如果你打算做大量的匹配和搜索操作的话,最好先编译正则表达式,然后再重复使用它。 模块级别的函数会将最近编译过的模式缓存起来,因此并不会消耗太多的性能, 但是如果使用预编译模式的话,你将会减少查找和一些额外的处理损耗。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180808G1MDQE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券