python正则表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python正则表达式相关的知识,希望对你有一定的参考价值。
正则表达式
1. 匹配一个字符
说明 | 表达式 | 等价表达式 |
数字 | \d | [0-9] |
字母、数字、下划线 | \w | [a-zA-Z0-9_] |
除换行外任意字符 | . | |
空格 | \s | [\t\n\r\f\v] |
除数字 | \D | |
除字母、数字、下划线 | \W | |
除空格 | \S |
2. 集合
表达式 | 说明 |
[abc][a-g] | []指一个集合,匹配[]中的任意一个 |
[^A] | ^在集合[]开头,匹配除A以外字符 |
A|B | 匹配A或B表达式 |
(A) | ()指一个组,匹配A中所有内容 |
3. 重复
表达式 | 说明 |
a? | 贪心地匹配a 0次或1次(贪心表示尽可能多地) |
a{m, n} | 信心地匹配a m-n次。{,n}:0-n次 {m,}:m-无限次 |
a* | 贪心地匹配a 0-无限次 |
a+ | 贪心地匹配a 1-无限次 |
a?? a*? a+? a{m,n}? | 尽可能少地匹配 |
4. 匹配位置
表达式 | 说明 |
^... | 要求匹配给定串的开头 |
...$ | 要求匹配给定串的结尾 |
...\b |
匹配单词边界,匹配成功要求A匹配到给定串的边界 使用时模式串要用r,因为\b还有其它意义 |
...\B | 匹配单词非边界 |
\A... | 要求匹配给定串的开头 |
...\Z | 要求匹配给定串的结尾 |
5. 设置标志
表达式 | 说明 |
(?aiLmsux) |
(?)是固定格式,后面的字母代表不同意思。 a(ASCII),i(IGNORECASE),L(LOCALE), m(MULTILINE,^和$会匹配每一行的开头和结尾), s(DOTALL,不用的时候.不能匹配换行符),u(), x(VERBOSE,可以在pattern里面换行写注释, 如a = re.compile(r"""\d + # the integral part \. # the decimal point \d * # some fractional digits""", re.X), #用来表示注释的开始) |
(?imsx-imsx:...) | 设置或移除标志,中间是-,标志的集合为imsx |
(P?name...) | 和一般()表达式一样,额外功能:可以用name来访问到对应的组 |
(P?=name) | 可以反向引用一个名字为name的组 |
(?#...) | #说明括号中的内容是注释,直接省略 |
A(?=B) | 若A在B前,才可匹配出A,同时B不消耗字符 |
A(?!B) | 若A不在B前,才可匹配出A,同时B不消耗字符 |
(?<=A)B | 若A在B前,才可匹配出B,同时A消耗字符 |
(?<!A)B | 若A不在B前,才可匹配出B,同时A消耗字符 |
\number |
引用第number组的模式串 pattern = ‘(A)(B) \2‘ 和 pattern = ‘(A)(B)(B)‘是等价的 例:re.search(r‘(a)(b)\2‘, ‘abb‘) |
函数
1. re:正则表达式模块
函数声明 | 功能 | 备注 |
compile(pattern, flag=0) | 把一个正则表达式编译成一个正则表达式对象 | pattern: 模式串flag:编译方法 |
search(pattern, string, flags=0) | 如果匹配不成功,则返回None成功,则MatchObject类型值 | |
split(pattern, string, maxsplit-0, flags=0) |
按照pattern模式对string进行分割(1. 把匹配成功的部分除去且成为分界 2. 如果pattern中有(),那么匹配成功的部分不除去且自己成为一个组) |
maxsplit:最多分割次数 如果pattern在串的最后能匹配成功,则还会分割出一个空串 |
findall(pattern, string, flags=0) |
把string按照pattern从左到右匹配,子串结果以元组形式返回(不重叠) | |
finditer(pattern, string, flags=0) |
把string按照pattern从左到右匹配,返回迭代器(不重叠) | |
sub(pattern, repl, string, count=0, flags=0) |
string中和pattern匹配成功的部分删除(只有最左的), 用repl来替换,返回匹配后的串 |
count:要删除匹配成功的个数,如果取0则所有都要换 |
escape(pattern) |
把pattern中除了ASCII字母和数字保留,其它都加上转义符\, 并返回修改后的串(当串中可能包含正则表达式特殊符号时可用来转换) |
2. 正则表达式对象,对应的函数功能与re模块类似
函数声明 |
功能 | 备注 |
search(string[,pos[,endpos]]) |
pos和endpos可不写 | |
match(string[,pos[,endpos]]) |
||
split(string, maxsplit=0) |
||
findall(string[,pos[,endpos]]) |
||
finditer(string,[,pos[,endpos]]) |
||
sub(repl, string, count=0) |
||
groups |
模式中子组的个数 | |
groupindex |
返回组名字与(?P<id>)定义组顺序的映射字典 |
|
pattern |
模式串 |
|
3. re.MatchObject类:匹配结果类
函数声明 |
功能 | 备注 |
group(index1, index2,...) |
返回匹配结果组 |
index指出要返回结果组的下标,默认为0, 把所有结果写成串。若有多个,以元组形式返回 |
groups() |
返回所有子组的元组 | |
groupdict() |
把所有命名的子组以字典形式返回 | |
start([group]) end([group]) |
返回子组(用名字或下标标识) 在串中匹配成功开始/结果的位置 |
|
startpos endpos |
传递给search和match函数时 指定的开始/结束匹配串的位置 |
|
lastindex lastgroup |
最后匹配成功的组的下标/名字 | 如果没有的话,返回None |
re |
匹配时用的正则表达式对象 | |
string | 传递给match/search函数的串 |
以上是关于python正则表达式的主要内容,如果未能解决你的问题,请参考以下文章