哒哒哒,正则表达式第二篇,承接上文
目录
一、常见的正则表达式
- 若以“
\
”开头的元字符和转义字符相同,则要使用“\\
”或原始字符,在字符串前加上字符r或R。 - 原始字符串可以可以减少用户的输入,主要用于正则表达式和文件路径字符串,若字符串以一个“
\
”结束,则要多些一个“\
”,以“\\
”结束。 - 子模式后面加上问号表示可选。
r'(http://)?(www\.)?python\.org'
只能匹配'http://python.org'、'www.python.org'和'python.org'
。
1.1、常见正则表达式的部分表
常见的正则表达式 | 说明 |
---|
普通的字符串(最简单德正则表达式) | 匹配自身 |
‘[pjc]ython’ | 匹配’python’、‘jython’、‘cython’ |
‘a-zA-Z0-9’ | 匹配一个任意大小写字母或数字 |
‘[^abc]’ | 一个匹配任意除’a’、‘b’、'c’之外的字符 |
‘python|perl ‘或’p(ython)|erl ’ | 匹配’python’或’perl’ |
‘^http’ | 只能匹配所有以’http’开头的字符串 |
‘(pattern)*’ | 允许模块重复0次或多次 |
‘(pattern)+’ | 允许模式重复1次或多次 |
‘(pattern){m,n}’ | 允许模式重复m~n次,在书写时注意逗号后面不能有空格 |
‘(pattern){,n}’ | 允许模式最多重复n次 |
‘(pattern){m,}’ | 允许模式最少重复m次,不限制最多重复多少次 |
‘(a|b)*c ’ | 匹配多个(包含0个)a和b,后面紧跟一个字母c |
ab{1,} | 等价于’ab+’,匹配以字母a开头后面带一个或多个字母b的字符串 |
^[a-zA-Z]{1}([a-zA-Z0-9.]){4,19}$ | 匹配长度为5~20的字符串,必须以字母开头并且可带字母、数字、’_’、’.'的字符串 |
… | … |
以上这些无需记忆,用时作参考。
二、re模块
Python 自带了re模块,它提供了对正则表达式的支持。
2.1、re模块主要方法
方法 | 功能说明 |
---|
compile(pattern[, flags]) | 创建模式对象 |
escape(string) | 将字符串中所有特殊正则表达式字符转义 |
findall(pattern, string[, flags]) | 返回包含字符串中所有与给定模式匹配的项的列表 |
finditer(pattern, string, flags=0) | 返回包含所有匹配项的迭代对象,其中每个匹配项都是match对象 |
fullmatch(pattern, string, flags=0) | 尝试把模式作用于整个字符串,返回match对象或None |
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可以是字符串或返回字符串的可调用对象,作用于每个匹配的match对象 |
subn(pat, repl, string[, count=0]) | 将字符串中所有pat的匹配项用repl替换,返回包含新字符串和替换次数的二元元组;repl可以是字符串或返回字符串的可调用对象,作用于每个匹配的match对象 |
2.2、re模块主要函数
函数 | 功能说明 |
---|
compile(pattern)[,flags] | 创建正则表达式对象 |
search(pattern,string[,flags]) | 在整个字符串中寻找模式,返回Match对象或None |
match(pattern,string[,flags]) | 从字符串的开始处匹配模式,返回Macth对象或None |
findall(pattern,string[,flags]) | 返回字符串中模式的所有匹配项分隔字符串 |
split(pattern,string[,fmaxsplit=0]) | 根据模式匹配分隔字符串 |
sub(pattern,repl,string[,count=0]) | 将字符串中所有pattern的匹配项用repl替换 |
escape(string) | 将字符串中所有特殊正则表达式字符进行转义 |
其中,函数参数flags的值可以是re.l(忽略大小写)、re.L、re.M(多行匹配模式)、re.S(使元字符’.'匹配任何字符,包括换行符)、re.U(匹配Unicode字符)、re.X(忽略模式中的空格,并可以使用#诠释)的不同组合(使用“|
”进行组合)。
三、使用正则表达式对象
- 首先使用re模块的compile()方法将正则表达式编译生成正则表达式对象,然后再使用正则表达式对象提供的方法进行字符串处理。
- 使用编译后的正则表达式对象可以提高字符串处理速度,也提供了更强大的文本处理功能。
- 正则表达式对象的match(string[, pos[, endpos]])方法用于在字符串开头或指定位置进行搜索,模式必须出现在字符串开头或指定位置;
- 正则表达式对象的search(string[, pos[, endpos]])方法用于在整个字符串中进行搜索;
- 正则表达式对象的findall(string[, pos[, endpos]])方法用于在字符串中查找所有符合正则表达式的字符串并返回列表。
3.1、使用正则表达式方法表
方法 | 说明 |
---|
match(string[, pos[, endpos]]) | 在字符串开头或指定位置进行搜索,模式必须出现在字符串开头或指定位置 |
search(string[, pos[, endpos]]) | 在整个字符串或指定范围中进行搜索 |
findall(string[, pos[, endpos]]) | 在字符串指定范围中查找所有符合正则表达式的字符串并以列表形式返回 |
sub(repl, string[, count = 0])和subn(repl, string[, count = 0]) | 用来实现字符串替换功能,其中参数repl可以为字符串或返回字符串的可调用对象 |
split(string[, maxsplit = 0]) | 用来实现字符串分隔 |
四、子模式与match对象
* 使用()表示一个子模式,括号中的内容作为一个整体处理.
例如’(red)+’可以匹配’redred’、’redredred‘等多个重复’red’的情况。
4.1、子模式扩展语法表
语法 | 功能说明 |
---|
(?P) | 为子模式命名 |
(?iLmsux) | 设置匹配标志,可以是几个字母的组合,每个字母含义与编译标志相同 |
(?:…) | 匹配但不捕获该匹配的子表达式 |
(?P=groupname) | 表示在此之前的命名为groupname的子模式 |
(?#…) | 表示注释 |
(?=…) | 用于正则表达式之后,表示如果=后的内容在字符串中出现则匹配,但不返回=之后的内容 |
(?!..) | 用于正则表达式之后,表示如果!后的内容在字符串中不出现则匹配,但不返回!之后的内容 |
(?<=…) | 用于正则表达式之前,与(?=…)含义相同 |
(?<!..) | 用于正则表达式之前,与(?!..)含义相同 |
4.2、match方法
正则表达式对象的match方法和search方法匹配成功后返回match对象
。
4.3、match对象主要方法表
match对象 | 说明 |
---|
group() | 返回匹配的一个或多个子模式内容 |
groups() | 返回一个包含匹配的所有子模式内容的元组 |
groupdict() | 返回包含匹配的所有命名子模式内容的字典 |
start() | 返回指定子模式内容的起始位置 |
end() | 返回指定子模式内容的结束位置的前一个位置 |
span() | 返回一个包含指定子模式内容起始位置和结束位置前一个位置的元组。 |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。