16-字符分类
7.6 字符分类
在前面电话号码正则表达式的例子中, \d
可以代表任何数字。也就是说, \d
是正则表达式 (0|1|2|3|4|5|6|7|8|9)
的缩写。有许多这样的“缩写字符分类”,如表7-1所示。
| 缩写字符分类 | 表示 |
| :----- | :----- | :----- | :----- |
| \d
| 0~9的任何数字 |
| \D
| 除0~9的数字以外的任何字符 |
| \w
| 任何字母、数字或下划线字符(可以认为是匹配“单词”字符) |
| \W
| 除字母、数字和下划线以外的任何字符 |
| \s
| 空格、制表符或换行符(可以认为是匹配“空白”字符) |
| \S
| 除空格、制表符和换行符以外的任何字符 |
字符分类对于缩短正则表达式很有用。字符分类 [0-5]
只匹配数字0~5,这比输入 (0|1|2|3|4|5)
要短很多。请注意,虽然 \d
匹配数字,而 \w
匹配数字、字母和下划线,但是没有速记字符类仅匹配字母。(你可以使用 [a-zA-Z]
字符类匹配字母。)
例如,在交互式环境中输入以下代码:
>>> 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()
方法将返回所有匹配该正则表达式的字符串,并将其放在一个列表中。