![a9caa85b3e61cde7bdd1b664e6f87aae.png](https://i-blog.csdnimg.cn/blog_migrate/1205f0be1e1be939ddc1b64bef8a4103.jpeg)
操作文本或者数据可是件大事。如果不相信,就仔细看看当今的计算机都在做些什么工
作:文字处理、网页表单的填写、来自数据库转储的信息流、股票报价信息、新闻源,而且
这个清单还会不断增长。因为我们可能还不知道需要用计算机编程来处理的文本或数据的具
体内容,所以能将这些文本或者数据以某种可被计算机识别和处理的模式表达出来是非常有
用的。
![f398ed1e805d06606eab01397dbc47e9.png](https://i-blog.csdnimg.cn/blog_migrate/a8dec16588447d217a9f56dc4e74374e.jpeg)
如果我在运营一个电子邮件存档公司,而作为我的一位客户,你希望查看你自己在去年
2 月份发送和接收的所有电子邮件。如果我能够设计一个计算机程序来收集这些信息,然后
转发给你,而不是人工阅读你的邮件然后手动处理你的请求,无疑要好很多。因为如果有人
看了你的邮件,哪怕只是用眼睛瞄了一下邮件的时间戳,你可能都会对此感到担心(甚至愤
怒)。又比如,你可能会认为凡是带有“ILOVEYOU”这样主题的邮件都是已感染病毒的邮
件,并要求从你的个人邮箱中删除它们。这就引出了一个问题,即我们如何通过编程使计算
机具有在文本中检索某种模式的能力。
正则表达式为高级的文本模式匹配、抽取、与/或文本形式的搜索和替换功能提供了基础。
简单地说,正则表达式(简称为regex)是一些由字符和特殊符号组成的字符串,它们描述了
模式的重复或者表述多个字符,于是正则表达式能按照某种模式匹配一系列有相似特征的字
符串(见图1-1)。换句话说,它们能够匹配多个字符串……一种只能匹配一个字符串的正则
表达式模式是很乏味并且毫无作用的,不是吗?
Python 通过标准库中的re 模块来支持正则表达式。本节将做一个简短扼要的介绍。限于
篇幅,内容将仅涉及Python 编程中正则表达式方面的最常见内容。当然,读者对于正则表达
式方面的经验(熟悉程度)肯定不同,我们强烈建议阅读一些官方帮助文档和与此主题相关
的文档。你将再次会对字符串的理解方式有所改变!
核心提示:搜索和匹配的比较本章通篇会使用搜索和匹配两个术语。当严格讨论与字符串中模式相关的正则表达式时,我们会用术语“匹配”(matching),指的是术语“模式匹配”(pattern-matching)。在Python 术语中,主要有两种方法完成模式匹配:“搜索”(searching),即在字符串任意部分中搜索匹配的模式;而“匹配”(matching)是指判断一个字符串能否从起始处全部或者部分地匹配某个模式。搜索通过search()函数或方法来实现,而匹配通过调用match()函数或方法实现。总之,当涉及模式时,全部使用术语“匹配”;我们按照Python 如何完成模式匹配的方式来区分“搜索”和“匹配”。
![5f287c309ab17b2dc596adb405f9b53b.png](https://i-blog.csdnimg.cn/blog_migrate/3c05a04b795dc4cdfc88adbd4848e3ea.jpeg)
![ff006e208e038f67b18c6ab7b230202e.png](https://i-blog.csdnimg.cn/blog_migrate/9492d2ae3eaaa207afb47a3a41e2a3d5.jpeg)
可以使用正则表达式来识别有效的Python 标识符,例如下面这些:[A-Za-z]w+的含义是第一个字符
是字母,也就是说要么A~Z,要么a~z,后面是至少一个(+)由字母数字组成的字符(w)。如图所示,
可以看到很多字符串被过滤,但是只有那些符合要求的正则表达式模式的字符串被筛选出来。比如“4xZ”
被筛选出来,这是因为它是以数字开头的