Python教程之正则表达式(基础篇)

2020-09-23 10:55:06 浏览数 (1)

在一篇文档中,你可能很熟悉文本查找,按下‘Ctrl F’输入你想要查找的词便可以实现。

但是在python中使用正则表达式则更进一步,它可以让你指定要查找的特定模式,并且根据该模式特定匹配在整个文本中所符合条件的内容。

其实正则表达式在很多编程语言中都是十分有用的,但如果不是程序员,很少有人会去了解它,现在大多数文本编辑器和文字处理器都有查找和替换的功能,都可根据正则表达式查找。

与此同时,正则表达式也可以节约大量的时间,它不仅适用于软件用户,也适用于进行软件开发的程序员。

技术作家Cory Doctorow就曾调侃道:“在教授编程之前,应该先教授正则表达式。”

其实如果你了解正则表达式,便意味着可以用三步解决一个问题,而不是3000步。如果你是一个技术大牛,那么你用几次敲击键盘就能解决的问题,别人可能要数天的繁琐工作才可以解决,并且容易犯错。这就是Python和现代人工智能所带来的便捷之处!

所以在这篇文章中,大灰狼会和大家分享用正则表达式来寻找文本模式,和正则表达式所具备的一些强大功能。

那么何为正则表达式?

正则表达式简称为「Regex」,是一种文本模式的叙述方法。例如‘d’是一个正则表达式,它所表示的是0-9的数字集合。在Python中就可以使用‘d’的正则表达式来匹配一连串的数字。

如我们可以使用‘ddd-dddd-dddd’来匹配我们通常所常见的电话号码的‘三四四’格式。但这也只是单纯的匹配数据,然而真正的正则表达式要比它复杂的多,同时正则表达式所具备的功能也远比想象中的要丰富。

那么在Python中如何正确的使用正则表达式呢?

正则表达式隐含在Python的re模块之中,当我们使用正则表达式的时候,首先要调用re模块。

re模块导入

代码语言:javascript复制
import re

同时正则表达式的表示是使用re模块中的compile()方法。向该方法中传入一个字符串的值来表达正则表达式,它将返回一个Regex模式对象,这个对象就表示了将要匹配的内容的正则表达式格式。

compike()方法正则表达式的表示

代码语言:javascript复制
telRegex=re.compile(r'ddd-dddd-dddd')

那么我们在设定好正则表达式之后,该如何让他进行文本匹配呢?

Regex对象的search()方法查找要寻找的字符串,寻找该正则表达式所有符合条件的匹配。

如果我们输入的字符串中没有类似的匹配,Search()方法将返回None(空值),如果找到了匹配,则search()方法将返回一个Match对象。其中mo是一个通用的名称,它可以用于Match对象。

Search()方法匹配文本

代码语言:javascript复制
telRegex=re.compile(r'ddd-dddd-dddd')

mo = telRegex.search('she tel is:123-4567-8910')

与此同时,Match对象有一个group()方法,它返回被查找的字符串中实际匹配的文本。

在交互式环境下,输入以下代码就会呈现相应的效果, group()方法输入匹配文本

代码语言:javascript复制
mo = telRegex.search('she tel is:123-4567-8910')

print(mo.group())

由此就可以看出,通过正则表达式来匹配寻找文本中的内容,比以往普通的方法要简单而方便的多。

同时,大灰狼也为大家总结了正则表达式匹配的具体方法步骤:

  1. 用import.re导入正则表达式模块
  2. 用re.compile()函数创建一个Regex对象(在此记得要使用原始字符串r)
  3. 向Regex对象的search()方法传入想要查找的字符串,它将返回一个Match对象
  4. 调用Match对象的group()方法返回实际匹配文本的字符串

匹配文本中的电话号码具体的实现代码如下:

文本电话号码匹配 import re

代码语言:javascript复制
telRegex=re.compile(r'ddd-dddd-dddd')

mo = telRegex.search('she tel is:123-4567-8910')

print(mo.group())

以上就是正则表达式的最基本的使用方法,但正则表达式的使用过程中,还会使用到很多方法,如大小写字母、特殊字符、空格换行符等类型的匹配。

我也会陆续在之后的文章中和大家分享Python中正则表达式的深入应用。

觉得有用记得关注分享,大灰狼陪你一起进步!

也可以关注我的微信公众号“灰狼洞主”获取更多实用有趣的代码分享个互联网资讯!

0 人点赞