1.3 排除型字符组

在方括号中列出希望匹配的所有字符,这种字符组叫做”普通字符组“,它的确很方便。不过,有些问题是普通字符组不能解决的。比如,给定一个由两个字符构成的字符串,要判断这两个字符中的第一个是数字字符,第二个不是数字字符(比如a8,z4)。数字字符的匹配很好处理,用[0-9]即可,“不是数字”则很难办——不是数字的字符太多了,全部列出几乎不可能,这是就要使用排除型字符组。

排除型字符组(negated character class)非常类似普通字符组,只是在开方括号[后紧跟一个脱字符^,写作[^...],表示“在当前位置,匹配一个字符组中没有列出的字符”。所以[^0-9]就表示“0-9之外的字符”,也就是“非数字字符”。

re.search(r'[^0-9]', '0') is not None  # False
re.search(r'[^0-9]', 'a') is not None  # True

排除型字符组必须匹配一个字符,这点一定要记住。

re.search(r'^[^0-9]8', 'a8')  # True
re.search(r'^[^0-9]8', '8')  # False

排除型字符组的用法与普通字符组几乎相同,唯一需要改动的是:在排除型字符组中,如果需要表示横线字符,那么-应该紧跟在^之后;而在普通字符组中,作为普通字符的横线-应该紧跟在开方括号[之后。

re.search(r'[^-0-9]', '-') is None  # True
re.search(r'[^-0-9]', '7') is None  # True

排除型字符组的转义

# 匹配一个0、1、2之外的字符
[^012]
# 匹配四个字符之一:0、^、1、2
[012^]
# ^紧跟在[之后,但经过转义变为普通字符,等价于上一个表达式,不推荐
[\^012]

你可能感兴趣的:(1.3 排除型字符组)