代码详解:Python正则表达式的优秀使用指南
处理文本数据的一个主要任务就是创建许多以文本为基础的特性。 人们可能想要在文本中找出特定格式的内容,比如找出存在于文本中的电子邮件,或者大型文本中的电话号码。 虽然想要实现上述功能听起来很繁琐,但是如果使用Python正则表达式模块,就可以使这一操作更加简单。 假设要在一篇特定的文章中找出标点符号的数量。以狄更斯的作品文本为例。 你通常会怎么做? 最简单的方法如下:
如果没有可支配的re模块,那就要用到上面的代码。但如果有re模块,则只需两行代码:
本文讨论的是最常用的正则表达式模式,以及一些经常使用的正则表达式函数。 什么是正则表达式?简而言之,正则表达式(regex)用于探索给定字符串中的固定模式。 我们想找到的模式可以是任何东西。 可以创建类似于查找电子邮件或手机号码的模式。还可以创建查找以a开头、以z结尾的字符串的模式。 在上面的例子中:
我们想找出的模式是 r’[,;.,–]’。这个模式可找出想要的4个字符中的任何一个。regex101是一个用于测试模式的工具。将模式应用到目标字符串时,呈现出以下界面。 如图所示,可以在目标字符串中根据需要找到,;.,–。 每当需要测试正则表达式时,都会用到上面的工具。这比一次又一次运行python要快得多,调试也容易得多。 现在我们已经可以在目标字符串中找到这些模式,那么如何真正创建这些模式呢? 创建模式使用正则表达式时,首先需要学习的是如何创建模式。 接下来将对一些最常用的模式进行逐一介绍。 可以想到最简单的模式是一个简单的字符串。
但这并不是很有用。为了帮助创建复杂的模式,正则表达式提供了特殊的字符/操作符。下面来逐个看看这些操作符。请等待gif加载。 1.[]操作符 这在第一个例子中使用过,可用于找到符合这些方括号中条件的一个字符。 [abc]-将查找文本中出现的所有a、b或c [a-z]-将查找文本中出现的所有从a到z的字母 [a-z0–9A-Z]-将查找文本中出现的所有从A到Z的大写字母、从a到z的小写字母和从0到9的数字。 可以很容易地在Python中运行下列代码:
除了.findall,正则表达式还有很多其他功能,稍后会涉及到。 2.点算符 点运算符(.) 用于匹配除换行符以外的任何字符。 运算符最大的优点是,它们可以结合使用。 例如,想在字符串中找出以小d或大写D开头,以字母e结尾,包含6个字母的子字符串。 3.一些元序列 在使用正则表达式时,一些模式会经常被用到。因此正则表达式为这些模式创建了一些快捷方式。最常用的快捷方式如下: \w,匹配任何字母、数字或下划线。相当于[a-zA-Z0–9_] \W,匹配除字母、数字或下划线以外的任何内容。 \d,匹配任何十进制数字。相当于[0–9]。 \D,匹配除十进制数字以外的任何数字。 4.加号和星形运算符 点算符只是用于获取任何字符的单个实例。如果想找出更多实例要怎么做呢? 加号+用于表示最左边字符的一个或多个实例。 星号*用于表示最左边字符的0个或多个实例。 例如,如果想找出所有以d开头,以e结尾的子字符串,d和e之间可以没有也可以有多个字符。我们可以用:d\w*e 如果想找出所有以d开头,以e结尾的子字符串,在d和e之间至少有一个字符,我们可以用:d\w+e 还可以使用更为通用的方法:用{} \w{n} - 重复\w 正好n次。 \w{n,} - 重复\w至少n次,或者更多次。 \w{n1, n2} - 重复 \w 至少n1次,但不超过n2次。 5.^插入符号和$美元符号。 ^插入符号匹配字符串的开始,而$美元符号则匹配字符串的结尾。 6.单词边界 这是一个重要的概念。 有没有注意到,在上面的例子中,总是匹配子字符串,而不是匹配单词? 如果想找出所有以d开头的单词呢? 可以使用d\w*模式吗?下面用网络工具来试一试吧。 正则表达式函数 目前为止,只使用了 re包中的findall 函数,其实还有很多其他函数。下面来逐个介绍。 1. findall 上面已经使用了 findall。这是我最常使用的一个。下面来正式认识一下这个函数吧。 输入:模式和测试字符串 (编辑:ASP站长网) |