一、方法
1. re.match函数
- 从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
- 匹配成功re.match方法返回一个匹配的对象,否则返回None。
参数说明:re.match(pattern, string, flags=0)
parameter description pattern 匹配的正则表达式 strings 要匹配的字符串 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
2. re.search方法
- 扫描整个字符串并返回第一个成功的匹配结果。
- 匹配成功re.search方法返回一个匹配的对象,否则返回None。
参数说明:re.search(pattern, string, flags=0)
parameter description pattern 匹配的正则表达式 strings 要匹配的字符串 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 - re.match与re.search的区别
- re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
运行结果:import re line = "Cats are smarter than dogs"; matchObj = re.match( r'dogs', line, re.M|re.I) if matchObj: print ("match --> matchObj.group() : ", matchObj.group()) else: print ("No match!!") matchObj = re.search( r'dogs', line, re.M|re.I) if matchObj: print ("search --> matchObj.group() : ", matchObj.group()) else: print ("No match!!")
No match!! search --> matchObj.group() : dogs
- re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
3. re.sub函数
- 用于替换字符串的匹配项
参数说明:(前三个为必选参数)re.sub(pattern, repl, string, count=0, flags=0)
parameter description pattern 匹配的正则表达式 repl 替换的字符串,也可以是一个函数 strings 要匹配的字符串 count 模式匹配后替换的最大次数,默认0表示替换所有 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 - repl参数是一个函数
执行输出结构为:import re # 匹配数字乘2 def double(matched): value = int(matched.group('value')) return str(value * 2) s = 'A234543354FBJS24' print(re.sub('(?P<value>\d+)', double, s))
A469086708FBJS48
- repl参数是一个函数
4. re.complie函数
- 用于编写正则表达式,生成一个正则表达式(pattern)对象,供match和search函数使用
参数说明:re.complie(pattern[,flag])
parameter description pattern 匹配的正则表达式 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
5. re.findall函数
- 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
- 注:match和search匹配一次,findall匹配所有
参数说明:re.findall(srting[, pos[, endpos]])
parameter description string 待匹配的字符串 pos 可选参数,指定字符串的起始位置,默认为0 endpos 可选参数,指定字符串的结束位置,默认为字符串的长度
6. re.finditer函数
- 在字符串中找到正则表达式所有匹配的所有子串,并把它们作为一个迭代器返回
参数说明:re.finditer(pattern, string, flags=0)
parameter description pattern 匹配的正则表达式 strings 要匹配的字符串 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
输出结果:import re it = re.finditer(r'\d+', '32n53nk64kj24n') for match in it: print(match.group())
32 53 64 24
7. re.split函数
- 按照能够匹配的子串将字符串分割返回列表
参数说明:re.split(pattern, string[, maxsplit=0, flags=0])
parameter description pattern 匹配的正则表达式 strings 要匹配的字符串 maxsplit 分隔次数,maxsplit=1 分隔一次,默认为0,不限次数 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
8. 正则表达式修饰符
parameter | description
---|---
re.I | 忽略大小写
re.L | 表示特殊字符集\w,\W,\b,\B,\s,\S依赖于当前环境
re.S | 即为'.'并且包括换行符在内的任意字符('.'不包括换行符)
re.U | 表示特殊字符集\w,\W,\b,\B,\d,\D,\s,\S依赖于 Unicode 字符属性数据库
re.X | 为了增加可读性,忽略空格和'#'后面的注释
二、匹配规则
pattern | description |
---|---|
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾 |
. | 匹配任意字符串,除换行符,当指定。re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符 |
[…] | 用来表示一组字符,单独列出:[amk]匹配 ‘a’, ‘m’或’k’ |
[^…] | 不在[]中的字符:[^abc]匹配除了a,b,c之外的字符 |
re* | 匹配0个或多个的表达式 |
re+ | 匹配1个或多个的表达式 |
re? | 匹配0个或1个由前面的正则表达式的片段,非贪婪模式 |
re{n} | 匹配n个前面表达式。例如,'o{2}‘不能匹配 ‘Bob’中的’o’,但是能匹配’food’中的两个’o’ |
re{n,} | 精确匹配n个前面表达式。例如:'o{2,}'不能匹配 ‘Bob’中的’o’,但是能匹配’fooooood’中的所有o。"o{1,}“等价于"o+”。"o{0,}“则等价于"o*” |
re{n,m} | 匹配n到m次由前面的正则表达式的片段,贪婪方式 |
a | b | 匹配a或b |
(re) | 匹配括号内的表达式,也表示一个组 |
(?imx) | 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。 |
(?-imx) | 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。 |
(?:re) | 类似(…)但是不表示一个组 |
(?imx: re) | 在括号中使用i,m或x可选标志 |
(?-imx: re) | 在括号中不使用i,m,或x可选标志 |
(?#…) | 注释 |
(?=re) | 前向肯定界定符。如果所含正则表达式,以 … 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。 |
(?!re) | 前向否定界符。于肯定定符相反;当所含表达式不能在字符串当前位置匹配时成功 |
\w | 匹配数字字母下划线 |
\W | 匹配非数字字母下划线 |
\s | 匹配任意空白字符,等价于[\n\t\r\f] |
\S | 匹配任意非空字符 |
\d | 匹配任意数字,等价于[0-9] |
\D | 匹配非数字 |
\A | 匹配字符串开始 |
\Z | 匹配字符串结束,如果存在换行,只匹配到换行前的结束字符串 |
\z | 匹配字符串结束 |
\G | 匹配最后匹配完的位置 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如: ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’ |
\B | 匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’ |
\n,\t | 匹配一个换行符。匹配一个制表符等 |
\1…\9 | 匹配一个换行符。匹配一个制表符等 |
\10 | 匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式 |