By Jackson@ML
Python以其强大的功能高居全球编程软件的榜首。它易于学习和使用,使其成为初学者绝佳语言。此外,Python还用于各种应用程序,包括Web开发、数据分析及人工智能等。
当今时代,越来越多的计算机软件在做模式识别的工作,尤其是语言模式识别,例如对单词及字符模式的识别。
如果能够指定一种模式,以其特定的字符来表示字符、数字和单词的组合,并利于学习,这就相当于一种新的语言范式,当然,这也是一种简单的语言。正则表达式应运而生,可以用很少的代码做很多的事情,可能用一两条语句就能完成复杂代码才能完成的任务。
正则表达式可以用简单的一系列字符来匹配一个单词,比如:用以下模式与单词”dog”匹配,这很好理解。
Dog
但是,如果单词多了,情况就变得复杂。假设,现在需要由多个匹配字母的组合:
正则表达式就类似一个筛子,用特定字符的要求来筛出所需要的字符。
按照上述的需求,下面的正则表达式可以满足要求:
Do+g
但由于加号(+)是特殊字符,不会让正则表达式去匹配加号,而是与前面的o一起形成一个子表达式。因此,上面的正则表达式可以匹配的结果有以下几种情况:
Dog
Doog
Dooog
Doooog
而另一种重要的运算符是星号( * ),它表示零个或多个前面的表达式(字符),因此,表达式Do*g可以匹配以下多个字符串:
Dg
Dog
Doog
Dooooog
… …
请注意以上模式,可以匹配到字符串”Dg”, 但是应该了解,星号( * )是一种表达式修饰符,不可以单独使用。
Python在 V1.5版本后,增加了re模块, 提供Perl风格的正则表达式;而这个re模块使得Python语言拥有全部的正则表达式功能。
我们来编写一段程序,在该程序中需要输入电话号码,但必须在输入后验证该号码是否格式正确,那么需要编写“电话号码”的验证函数。
如果电话号码为八位数,区号为前两位,那么可以用井号(#)及以下模式来验证电话号码:
###-####-####
根据正则表达式的语法,按以下代码来编写模式:
\d\d\d-\d\d\d\d-\d\d\d\d
反斜杠(\)充当转义字符。但此处的d不是使它变为文字字符,而是让它具有特殊含义。
子表达式\d表示匹配任何一位数字字符。
按以上电话号码的模式,编写一个验证电话号码的正则表达式模式,代码如下:
import re
pattern = r'\d\d\d-\d\d\d\d-\d\d\d\d'
str = input('Enter your telephone number:')
if re.match(pattern, str):
print('The number accepted!\nYour number is: ' + str)
else:
print('Incorrect number! Try again.')
执行结果如下图所示:
该程序首先导入正则表达式软件包re, 对于Python的扩展库的导入,使用以下命令:
import re
re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none.
换句话说,程序中的match函数被re调用,并且使用pattern参数和目标字符串(str)进行比较。如果匹配,那么该函数返回一个match对象;否则返回none。(none可以被转换成布尔值false)。
该函数通用语法:
re.match(pattern, string, flags=0)
其中,pattern为匹配的正则表达式; string为要匹配的字符串;flags为标志位,用于控制正则表达式的匹配方式。如:是否为大小写,多行匹配等。
综上所述,为了匹配正则表达式,将要匹配的字符串进行对比,就能够筛选出需要的字符串;如需改进匹配模式,也可以修正和优化匹配规则,从而得到想要的字符串,达到事半功倍、提高效率的目的。