正则 in Python
2013-03-03 00:00:00

简单说一下为什么要用正则表达式,因为可以用简洁的方式处理几乎所有的字符串查找和匹配,节省生命,节省脑子。

文中的内容主要参考自《精通正则表达式 第三版》
《Python 核心编程 第二版》以及Python re,主要做一下总结和笔记。感兴趣的同学可以深入看一下这两本书最后再看一下标准。

Regex 中的特殊字符和规则

这里介绍的是Python 2.7支持的部分,有些工具会支持更多高级的用法

位置匹配

^ 匹配行首

$ 匹配行末

###贪婪匹配

. 匹配任何字符(换行符除外)

* 匹配任意次或不匹配

+ 匹配至少一次

? 匹配一次或不匹配

{N} 匹配N次

{M:N} 匹配M次到N次

###非贪婪匹配

*?,+?,??,{M:N}?

###多选结构

[…] 匹配出现任一字符

[0-9a-zA-Z] 范围匹配

[^…] 不匹配任一字符

re1|re2 匹配任一表达式

###分组

(…) 分组并捕获

(?:…) 分组不捕获

###环视

(?=…) 顺序肯定环视

(?!…) 顺序否定环视

(?<=…) 逆序肯定环视

(?<!…) 逆序否定环视

###特殊字符

\number 捕获分组匹配

\b 匹配单词边界(\A,\Z)

\d 匹配数字

\D 匹配非数字

\s 匹配任一空白

\S 匹配非空白

\w 匹配任何数字和字母

\W 匹配任意非数字和字母

Python re库

compile 编译出re对象

I 忽略大小写flag

M 多行模式flag

search(paattern,string,flag) 匹配并返回match对象

split(pattern,string,maxsplit,flags) 按pattern分割,pattern加括号会将分隔符输出

findall/finditer(pattern,string,flags) 返回匹配列表/迭代器

sub/subn(pattern,repl,string,count,flag) 替换/替换并返回替换次数

Python match 对象

group([group1,…]) 返回捕获分组内容

groups() 返回捕获内容列表

groupdict() 返回列表名

start、end([group]) 返回匹配位置开始/结束

re 匹配的re表达式

string 源字符串