六、分组
我们已经讲过为单个字符指定重复次数的方法——直接在字符后面加上限定符就行了;现在我们再来学习一下重复多个字符的八法:你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了,你也可以对子表达式进行其它一些操作。
我们知道,IP地址是由点号分隔的四个数字,并且每个数字都不能大于255。(\d{1,3}\.){3}\d{1,3}是一个简单的IP地址匹配表达式,其中:\d{1,3}匹配1到3位的数字,(\d{1,3}\.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(\d{1,3})。
然而,它也将匹配256.300.888.999这种不可能存在的IP地址。如果能使用算术比较的话,或许能简单地解决这个问题,但是正则表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组、选择和字符集合来描述一个正确的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。理解这个表达式的关键是理解2[0-4]\d|25[0-5]|[01]?\d\d?,经过上面的介绍,相信读者能分析得出来它的意义。
七、小结
正则表达式是一种极其有用的文本处理技术,不过用起来有一定的难度。Python语言的re模块对基本的正则表达式提供了相应的支持。对于需要处理文本的程序员来说,必须对正则表达式有一个全面深入的认识。本文主要为不熟悉正则表达式的读者提供了元字符方面的有关知识,更多正则表达式方面的知识,我们将在后面的文章中陆续加以介绍。