python之正则表达式
记号 |
说明 | 样例 |
literal | 匹配字符串的值 | foo |
re1|re2 | 匹配正则表达式re1 或 re2 | foo|bar |
. | 匹配任意字符(除换行符) | b.b |
^ | 匹配字符串的开始 | ^Dear |
$ | 匹配字符串的结尾 | /bin/*sh$ |
* | 匹配前面出现的正则表达式零次或多次 | [A-Za-z0-9]* |
+ | 匹配前面出现的正则表达式一次或多次 | [a-z]+ |
? | 匹配前面出现的正则表达式零次或一次 | goo+ |
{N} | 匹配前面出现的正则表达式N次 | [0-9]{3} |
{M,N} | 匹配重复出现M到N次的正则表达式 | [0-9]{3,5} |
[...] | 匹配字符组里任意一个字符 | [ahfj] |
[..x-y..] | 匹配从x到y中的任意字符 | [0-9],[A-Za-z] |
[^...] | 不匹配字符集中出现的任一字符 | [^A-Za-z] |
(*|+|?|{})? | 用于非贪婪模式 | .*?[a-z] |
(...) | 匹配括号中的正则表达式,并保存为子组 | ([0-9]{3})?,f(oo|u)bar |
记号 | 说明 | 样例 |
\d | 匹配任何数字,和[0-9]一样 (\D是\d的反义:任何非数字符) | data\d+.txt |
\w | 匹配任何数字字母字符,和[A-Za-z0-9]相同 (\W是\w的反义) | [A-Za-z]\w+ |
\s | 匹配任何空白符,和[\n\t\r\v\f]相同,(\S是\s的反义) | of\sthe |
\b | 匹配单词边界(\B是\b的反义) | \bThe\b |
\nn | 匹配已保存的子组 | price:\16 |
\c | 逐一匹配特殊字符c | \., \\, \* |
\A(\Z) | 匹配字符串的开始(结尾) | \ADear |
函数/方法 | 描述 |
compile(pattern, flags=0) | 对正则表达式模式pattern进行编译,flags可选参数 |
match(pattern, string, flags=0) | 用pattern匹配字符串string开头,如成功则返回匹配对象,否则返回None |
search(pattern, string, flags=0) | 在字符串string中搜索pattern的第一次出现,如成功则返回匹配对象,否则返回None |
findall(pattern, string[,flags]) | 在字符串string中搜索pattern的所有出现,返回匹配对象的列表 |
finditer(pattern, string[,flags]) | 和findall相同,但返回的是迭代器 |
split(pattern, string, max=0) | 根据pattern把string分割为一个列表,并返回 |
sub(pattern, repl, string, max=0) | 把string中匹配到的pattern换成repl |
subn(pattern, repl, string, max=0) | 和sub相同,但并返回替换次数 |
group(num=0) | 返回全部匹配对象(或第num个子组) |
groups() | 返回一个包含全部匹配的子组的元组 |
正则表达式默认是贪心匹配的,如果正则表达式模式中使用到通配字,那它在按照从左到右的顺序求值时,会尽量“抓取”满足匹配的最长字符串。有时需要“抓取”最短字符串,因此就需要使用非贪心匹配。非贪婪操作符“?”,可以用在“*”,“+”,“?”的后面。