简单模式

1、字符匹配

元字集

. ^ $ * + ? { [ ] \ | ( )


  首先看的是 “[” 和 “]” ,其用来表示一个字符集。字符可以单个表示,也可以用 - 来连接字符来表示一个范围。如:[a,b,c,d,e]等价于[a-e]。另一个特性:  [^5] 表示匹配除了5以外的任意字符。

最重要的字符就是 \ ,在python中,可以在反斜杠后面加字符来表示特殊的含义。如,可以用 \\ 和 \[ 来匹配  \ 和 [ 。下面是一些预定义好的一些特殊字符:

\d 匹配任何十进制数;它相当于类 [0-9]。

\D 匹配任何非数字字符;它相当于类 [^0-9]。

\s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。

\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。

\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。

\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。

2、重复

  首先,讨论的是 “ * ”,*并不匹配*,而是表示*前面的字符会出现零次或者多次(>=1)。

如liy*ao,将会匹配"liao"出现(y出现0次)liao、(y出现1次)liyao、(y出现2次)liyyao等等。

像*这样的匹配模式成为贪婪模式,会尽可能的去更多的匹配。如果模式后面的没有被匹配,那么匹配引擎会退回,并尽可能的少匹配。如

另一个重复的字符是 +,表示匹配一次或者多次。注意 *是零次或者更多次。

还有其他的限定符,如 ? 。表示匹配一次或者零次;可以理解为事物是可选的,如home-?brew,可以匹配homebrew 或者 home-brew。

还有更复杂的限定符:{m,n},注意m、n之间不能有空格。其中 m 和 n 是十进制的整数。表示至少m次重复,至多n次重复。如a\{1,3}b,会匹配出,a\b , a\\b , a\\\b 这三种情况。m 和 n是可以省略的,省略m表示下限为0,省略n上线为无穷大(其实为20亿,近似为无穷大)。不难发现,{0,}=* ; {1,}=+ ; {0,1}=?。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容