正则表达式(RE)为高级文本模式匹配,以及搜索-替代等功能提供了基础,RE有字符和特殊符号组成,描述了这些字符和字符的某种重复方式,能按某种模式匹配一个有相似特征的字符串的集合,因此能按某种模式匹配一系列有相似特征的字符串
特殊符号和字符
符号和字符赋予了正则表达式强大的功能和灵活性,下表是常见的符合和字符
符号 | 说明 | 举例 |
---|---|---|
literal | 匹配字符串的值 | foo |
data1|data2 | 匹配正则表达式data1或data2 | foo|bar |
. | 匹配任何字符(换行符除外) | b.b |
^ | 匹配字符串的开始 | ^head |
$ | 匹配字符串的结尾 | tail$ |
* | 匹配前面出现的正则表达式零次或多次 | [A-Za-z0-9]* |
+ | 匹配前面出现的正则表达式一次或多次 | [a-z]+.com |
? | 匹配前面出现的正则表达式零次或一次 | goo? |
{N} | 匹配前面出现的正则表达式N次 | [0-9]{3} |
{M,N} | 匹配重复出现M次到N次的正则表达式 | [0-9]{5,9} |
[…] | 匹配字符组里出现的任意一个字符 | [aeiou] |
[..x-y..] | 匹配从字符x到y中的任意一个字符 | [0-9],[A-Za-z] |
[^…] | 不匹配此字符集中出现的任何一个字符,包括某一范围的字符(如果在此字符集中出现) | [^aeiou],[^A-Za-z0-9_] |
(*|+|?|{})? | 用于上面出现的任何“非贪婪”版本重复匹配次数符号(*,+,?,{}) | .*?[a-z] |
(…) | 匹配封闭括号中正则表达式,并保存为子组 | ([0-9]{3})?,f(oo |
\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 |
re模块
常见的正则表达式函数与方法
函数/方法 | 描述 |
---|---|
compile(pattern) | 对正则表达式模式pattern进行编译,flags是可选标志符,并返回一个regex对象 |
match(pattern,string,flags=0) | 尝试用正则表达式模式pattern匹配字符串string,flags是可选标志符,如果匹配成功,则返回一个匹配对象,否则返回None |
search(pattern,string,flags=0) | 在字符串string中查找正则表达式模式pattern的第一个出现,flags是可选标志符,如果匹配成功,返回一个匹配对象,否则返回None |
findall(pattern,string[,flags]) | 在字符串string中查找正则表达式模式pattern的所有(非重复)出现;返回一个匹配对象的列表 |
finditer(pattern,string[,flags]) | 和findall()相同,但返回的不是列表而是迭代器,对于每个匹配,该迭代器返回一个匹配对象 |
split(pattern,string,max=0) | 根据正则表达式pattern中的分隔符把字符string分割为一个列表,返回成功匹配的列表,最多分割max次 |
sub(pattern,repl,string,max=0) | 把字符串string中的所有匹配正则表达式pattern的地方替换成字符串repl,如果max么米有给出,则对所有匹配的地方进行替换 |
group(num=0) | 返回全部匹配对象 |
groups | 返回一个包含全部匹配的子组的元组 |