正则表达式(regular expression)是一种用形式化语法描述的文本匹配模式。在须要处理大量文本处理的应用中有普遍的使用,我没使用的编辑器,IDE中的搜索经常使用正则表达式做为搜索模式。玩过*nix系统的都知道如sed,grep,awk这类的命令,他们是很是强大的文本处理工具。几乎全部的语言都有对正则表达式的支持,有的直接在语法中支持,有的使用扩展库的形式。python使用的就是扩展库re。python
import re pattern = "this" text = "Does this text match the pattern?" match = re.search(pattern, text) # 返回一个Match对象 print match.re.pattern # 要匹配的正则表达式"this" print match.string # 匹配的文本"Does this match the pattern?" print match.start() # 匹配的开始位置 5 print match.end() # 匹配的结束位置 9
import re regex = re.compile("this") text = "Does this text match the pattern?" match = regex.search(text) if match: print "match" match.group(0) #返回匹配的字符串 else: print "not match"
import re pattern = 'ab' text = 'abbaaabbbbaaaaaa' re.findall(pattern, text) # 返回['ab', 'ab']
import re pattern = 'ab' text = 'abbaaabbbbaaaaaa' match = re.finditer(pattern, text) for m in match: print m.start() print m.end()
以上的例子会分别输出两次匹配结果的起始位置和结束位置。正则表达式
正则匹配默认采用的是贪婪算法,也就是说会re在匹配的时候会利用尽量多的输入,而使用?能够关闭这种贪心行为,只匹配最少的输入。这以前先说下量词。算法
量词是为了简化正则表达式的读写而定义的,通用的形式是{m,n},这表示匹配的个数至少是m,最可能是n,在','以后不能有空格,不然会出错,而且均为闭区间。express
{n} 以前的元素必须出现n次
{m,n} 以前元素最少出现m次,最多n次
{m,} 以前的元素最少出现m次,无上限
{0,n} 以前的元素能够不出现,也能够出现,出现的话最多出现n次缓存
除了之上,还有三个经常使用的量词*,?和+编辑器
* 等价于{0,}
+ 等价于{1,}
\? 等价于{0,1}函数
还有^和$,分别表示段或者字符串的开始与结束。工具
import re re.search("^travell?er$", "traveler") # True re.search("^travell?er$", "traveller") # True re.search("^ab\*", "abbbbbbb") # True,返回"abbbbbbb" re.search("^ab\*?", "abbbbbbb") # True,返回"a" re.search("^ab+", "abbbbbbb") # True,返回"abbbbbbb" re.search("^ab+?", "abbbbbbb") # True,返回"ab"