Python正则表达式指南(上)

1. 正则表达式基础

1.1. 简单介绍

正则表达式并非Python的一部分。正则表达式是用于处理字符串的强大工具,拥有本身独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是同样的,区别只在于不一样的编程语言实现支持的语法数量不一样;但不用担忧,不被支持的语法一般是不经常使用的部分。若是已经在其余语言里使用过正则表达式,只须要简单看一看就能够上手了。正则表达式

下图展现了使用正则表达式进行匹配的流程: 
re_simple编程

正则表达式的大体匹配过程是:依次拿出表达式和文本中的字符比较,若是每个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。若是表达式中有量词或边界,这个过程会稍微有一些不一样,但也是很好理解的,看下图中的示例以及本身多使用几回就能明白。编程语言

下图列出了Python支持的正则表达式元字符和语法:   
pyre工具

1.2. 数量词的贪婪模式与非贪婪模式

正则表达式一般用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也多是默认非贪婪),老是尝试匹配尽量多的字符;非贪婪的则相反,老是尝试匹配尽量少的字符。例如:正则表达式"ab*"若是用于查找"abbbc",将找到"abbb"。而若是使用非贪婪的数量词"ab*?",将找到"a"。spa

1.3. 反斜杠的困扰

与大多数编程语言相同,正则表达式里使用"\"做为转义字符,这就可能形成反斜杠困扰。假如你须要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将须要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可使用r"\\"表示。一样,匹配一个数字的"\\d"能够写成r"\d"。有了原生字符串,你不再用担忧是否是漏写了反斜杠,写出来的表达式也更直观。blog

1.4. 匹配模式

正则表达式提供了一些可用的匹配模式,好比忽略大小写、多行匹配等,这部份内容将在Pattern类的工厂方法re.compile(pattern[, flags])中一块儿介绍。字符串