17-建立自己的字符分类
7.7 建立自己的字符分类
有时候你想匹配一组字符,但缩写的字符分类( \d
、 \w
、 \s
等)太宽泛。这时候你可以用方括号定义自己的字符分类。例如,字符分类 [aeiouAEIOU]
将匹配所有元音字符,且不区分大小写。在交互式环境中输入以下代码:
>>> vowelRegex = re.compile(r'[aeiouAEIOU]')
>>> vowelRegex.findall('RoboCop eats baby food. BABY FOOD.')
['o', 'o', 'o', 'e', 'a', 'a', 'o', 'o', 'A', 'O', 'O']
也可以使用短横线表示字母或数字的范围。例如,字符分类 [a-zA-Z0-9]
将匹配所有小写字母、大写字母和数字。
请注意,在方括号内,普通的正则表达式符号不会被解释。这意味着你不需要在前面加上倒斜杠转义.、 *
、 ?
或 ()
字符。例如,字符分类将匹配数字0~5和一个句点,你不需要将它写成 [0-5\.]
。
在字符分类的左方括号后加上一个插入字符( ^
),就可以得到“非字符类”。非字符类将匹配不在这个字符类中的所有字符。例如,在交互式环境中输入以下代码:
>>> consonantRegex = re.compile(r'[^aeiouAEIOU]')
>>> consonantRegex.findall('RoboCop eats baby food. BABY FOOD.')
['R', 'b', 'c', 'p', ' ', 't', 's', ' ', 'b', 'b', 'y', ' ', 'f', 'd', '.', '
', 'B', 'B', 'Y', ' ', 'F', 'D', '.']
现在,程序不是匹配所有元音字符,而是匹配所有非元音字符。