在前面电话号码正则表达式的例子中,你知道\d 可以代表任何数字。也就是说,\d
是正则表达式(0|1|2|3|4|5|6|7|8|9)的缩写。有许多这样的“缩写字符分类”,如表7-1 所示。
表 7-1 常用字符分类的缩写代码
缩写字符分类 表示
\d 0 到 9 的任何数字
\D 除 0 到 9 的数字以外的任何字符
续表
缩写字符分类 表示
\w 任何字母、数字或下划线字符(可以认为是匹配“单词”字符)
\W 除字母、数字和下划线以外的任何字符
\s 空格、制表符或换行符(可以认为是匹配“空白”字符)
\S 除空格、制表符和换行符以外的任何字符
字符分类对于缩短正则表达式很有用。字符分类[0-5]只匹配数字 0 到 5,这比输入(0|1|2|3|4|5)要短很多。
例如,在交互式环境中输入以下代码:
>>> xmasRegex = re.compile(r'\d+\s\w+')
>>> xmasRegex.findall('12 drummers, 11 pipers, 10 lords, 9 ladies, 8 maids, 7
swans, 6 geese, 5 rings, 4 birds, 3 hens, 2 doves, 1 partridge')
['12 drummers', '11 pipers', '10 lords', '9 ladies', '8 maids', '7 swans', '6
geese', '5 rings', '4 birds', '3 hens', '2 doves', '1 partridge']
正则表达式\d+\s\w+匹配的文本有一个或多个数字(\d+),接下来是一个空白字符(\s),接下来是一个或多个字母/数字/下划线字符(\w+)。findall()方法将返回所有匹配该正则表达式的字符
串,放在一个列表中。