正则表达式使用某种预定义的模式去匹配一类具有共同特征的字符串,主要用于处理字符串,可以快速、准确地完成复杂的查找、替换等处理要求。
元字符 | 功能说明 |
---|---|
. | 匹配除换行符以外的任意单个字符 |
* | 匹配位于*之前的字符或子模式的0次或多次出现 |
+ | 匹配位于+之前的字符或子模式的1次或多次出现 |
- | 在[]之内用来表示范围 |
| | 匹配位于|之前的或之后的字符 |
^ | 匹配行首,匹配以^后面的字符开头的字符串 |
$ | 匹配行尾,匹配位于$之前的字符结束的字符换 |
? | 匹配位于?之前的0个或1个字符。当此字符紧随任何其他限定符(*、+、?、{n}、 {n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有“o |
\ | 表示位于\之后的为转移字符 |
\num | 此处num是一个正整数,表示子模式的编码 |
\f | 换页符匹配 |
\n | 换行符匹配 |
\r | 匹配一个回车符 |
\b | 匹配单词头或单词尾 |
\B | 与\b含义相反 |
\d | 匹配任何数字,相当于[0-9] |
\D | 与\d含义相反,等效于[ ^0-9] |
\s | 匹配任意空白字符,包括空格、制表符、换行符,与[\f\n\r\t\v]等效 |
\S | 与\s相反 |
\w | 匹配任何字母、数字以及下划线,相当于[ a-zA-Z0-9] |
\W | 与\w含义相反 |
() | 将位于()内的内容作为一个整体 |
{m,n} | 位于{前的字符或子模式重复至少m次,至多n次 |
[] | 表示范围,匹配位于[]中的任意一个字符 |
[^xyz] | 反向字符集,匹配出xyz以外的任意字符 |
[a-z] | |
[^a-z] |
“^”代表字符串的开头
“$”代表字符串的结束
表达式:^hi
可匹配:hi,him,hidden等
表达式:hi$
可匹配:hi,adfdfi,sadasdfi等
表达式^hi$
可匹配:hi
[]匹配一堆字符串中的一个[a-z]字符范围,匹配指定范围的任意字符
表达式:^[aeiou]at$
可匹配:aat,eat等
表达式:^[a-z]at$
可匹配:aat,bat等
表达式:^[A-Za-z]at$
可匹配:Aat,Cat,aat等
反向字符集[ ^xyz] ,匹配除x、y、z之外的任何字符
表达式:[^xyz]
可匹配:c,m,z等
分支“|”用来指定几个规则只要匹配一个规则即成匹配。
表达式:^com$|^org$|^net$
可匹配:com,org,net
表达式:^abc\.(com|org|net)$
可匹配:abc.com ,abc.org,abc.net
“( )”可以指定一堆字符来匹配一个模式。又称为子模式
表达式:^(very )*large$
可匹配:large,very large,very very large等
“+”表示前一字符模式可以被重复1次或n次。
表达式:^go+gle$
可匹配:google,goooogle等
表达式:^g[aeiou]+gle$
可匹配:gagle,gegle等
“*”表示前一字符模式可以被重复0次或n次。
表达式:^go*gle$
可匹配:ggle,google,gooooooooooogle
“{x,}”表示前一字符模式可以被重复至少x次。
表达式:^go{2,}gle$
可匹配:google gooogle goooogle
“{x,y}”表示前一字符模式可以被重复x到y次。
表达式: ^go{2,4}gle$
能匹配的字符串(仅3个):google gooogle goooogle
限定符:限定前面的表达式出现的次数
限定符 | 解释 |
---|---|
a* | a出现0次或多次 |
a+ | a出现1次或多次 |
a{6} | a出现6次 |
a{2,6} | a出现2-6次 |
a{2,} | a出现两次以上 |
表达式:^1\*\(2\+3\)=6$
可匹配:1*(2+3)=6
匹配任何一个数字,相当于[0-9]。
表达式:^ \d{4}$
可匹配:2131,3432,2131等
表达式:^ \d{4}-\d{1,2}-\d{1,2}$
可匹配:2016-1-31
匹配任何一个字母、数字以及下划线,相当于[a-zA-Z0-9_]
。
表达式:'^(\w){6,20}$'
可匹配:111111
匹配单词头或单词尾,不匹配任何实际字符,表示字母数字与非字母数字的边界,非字母数字与字母数字的边界。
表达式:'\bb.+\b'
可匹配:以b开头的完整单词
举例
**方法 ** | 功能说明 |
---|---|
compile(pattern[, flags]) | 创建模式对象 |
escape(string) | 将字符串中所有特殊正则表达式字符转义 |
findall(pattern, string[, flags]) | 返回包含字符串中所有与给定模式匹配的项的列表 |
match(pattern, string[, flags]) | 从字符串的开始处匹配模式,返回match对象或None |
purge() | 清空正则表达式缓存 |
search(pattern, string[, flags]) | 在整个字符串中寻找模式,返回match对象或None |
split(pattern, string[, maxsplit=0]) | 根据模式匹配项分隔字符串后返回列表 |
sub(pat, repl, string[, count=0]) | 将字符串中所有与pat匹配的项用repl替换,返回新字符串,repl 可以是字符串或返回字符串的可调用对象。 |
subn(pat, repl, string[, count=0]) | 将字符串所有的pat的匹配项用repl替换,返回包含新字符串和替换次数的二元元组,repl可以是字符串或返回字符串的可调用对象 |
match方法和search方法匹配成功后返回match对象。match对象的主要方法有:
group()返回匹配的一个或多个子模式内容,当要获得整个匹配的子串时,可直接使用 group() 或 group(0)
groups():返回一个包含匹配的所有子模式内容的元组
>>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist")
>>> m.group(0) #返回整个模式内容
'Isaac Newton'
>>> m.group(1) #返回第1个子模式内容
'Isaac'
>>> m.group(2) #返回第2个子模式内容.
'Newton'
>>> m.group(1, 2) #返回指定的多个子模式内容
('Isaac', 'Newton')
>>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist")
>>> m.group(0) #返回整个模式内容
'Isaac Newton'
>>> m.group(1) #返回第1个子模式内容
'Isaac'
>>> m.group(2) #返回第2个子模式内容.
'Newton'
>>> m.group(1, 2) #返回指定的多个子模式内容
('Isaac', 'Newton')