1.4 字符组简记法

对于[0-9][a-z]等常用字符组,正则表达式提供了更简单的记法,这就是字符组简记法(shorthands)。

常用的字符组简记法

含义 表达式 等价表达式
数字字符(0-9) \d [0-9]
单词字符(数字字母下划线) \w [0-9a-zA-Z_]
空白字符 \s [ \t\r\n\v\f](第一个字符是空格)

“空白字符”并不难定义,它可以是空格字符、制表符\t、回车符\r,换行符\n等各种“空白”字符,只是不方便展现(因为打印出来都是空白)。

字符组简记法可以单独出现,也可以使用在字符组中,比如[0-9a-z]可以写作[\da-z][^0-9]可以写作[^\d]

相对于\d\w\s这三个普通字符组简记法,正则表达式也提供了对应排除型字符组的简记法:\D\W\S——字母完全一样,只是改为大写。这些简记法匹配的字符互补:\d能匹配的字符,\D一定不能匹配,\w能匹配的字符,\W一定不能匹配,\s能匹配的字符,\S一定不能匹配。

re.search(r'\d', '8') is not None  # True
re.search(r'\d', 'a') is not None # False

妥善利用这种互补的属性,可以得到一些非常巧妙的效果。最简单的应用就是字符组[\s\S],它等价于[\w\W][\d\D],可以匹配“任意字符”。

关于字符组简记法,最后要补充两点:

  • 如果字符组中如果出现了字符组简记法,最好不要出现单独的-,比如[\d-a]就让人很困惑,在有些语言中-会被当作普通字符,而在有些语言中,这样写会报错。
  • 以上说的\d\w\s的匹配规则,都是针对ascii 编码而言的,也叫ASCII匹配规则。但是,目前一些语言中的正则表达式已经支持了Unicode字符,那么数字字符、单词字符、空白字符的范围,已经不仅仅限于ASCII编码中的字符。

你可能感兴趣的:(1.4 字符组简记法)