Python 中的正则表达式
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定的字符串、及这些特定字符的组合,组成一个”规则字符串“,这个规则字符串用来表示对字符串的一种过滤逻辑
字符串是编程时涉及到的最多的一种数据结构,使用正则表达式可以完成判断一个字符串是否为合法电话号、是否是 Email 格式等操作
文章最后符一些常用的正则表达式!
正则表达式通用符号及解释
模式 | 描述 |
---|---|
. | 匹配任意除 \n 外的字符 |
\ | 转义字符,是一个特殊字符原来的意思 |
[…] | 对应位置可以是字符集中的任意字符 |
\d | 数字(0~9) |
\D | 非数字 |
\s | 空白字符(空格、\t、\r、\n、\f、\v) |
\S | 非空白字符 |
\w | 单词字符(A |
\W | 非单词字符 |
* | 匹配前一个字符 0 或 无限次 |
+ | 匹配前一个字符 1 或 无限次 |
? | 匹配前一个字符 0 或 1 次 |
{m} | 匹配前一个字符串 m 次 |
{m, n} | 匹配前一个字符串 m 至 n 次 |
^ | 匹配字符串开头 |
$ | 匹配字符串末尾 |
\A | 仅匹配字符串开头 |
\Z | 仅匹配字符串末尾 |
\b | 匹配 \w 和 \W 之间 |
\B | 与上一个相反 |
re 模块
python 通过导入 re 模块来使用正则表达式功能
1 | import re |
re.compile
compile 函数的返回值是一个 pattern
(正则表达式对象),是用来自己定义正则表达式的函数,下面的句子是描述一个以 he 开头,后面接任意字符,并且以 o 结尾的字符串的正则表达式,例如 hello
1 | pattern = re.compile(r'^(he)+.*o$') |
re.match
match 函数是根据给定的正则表达式,来判定一个字符串是否符合规则的函数,匹配成功返回一个 match 对象,否则返回 None,下面是以上边 compile 函数返回的正则表达式为基础,对字符串检测的语句
1 | result = re.match(pattern, 'hello') |
match.group
这个函数是用来获取匹配后的字符串的,它的返回值是一个元组
1 | # 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号 |
re.search
search 函数的用法和 match 函数很接近,search 函数会扫描整个字符串并返回第一个成功的匹配,也是一个 match 对象,使用的参数也与 match 函数相同
1 | res = re.search(pattern1, str) |
二者的区别在于,match 函数只匹配字符串的开始,如果开始不符合,就会匹配失败,而 search 函数会匹配整个字符串,直到找到一个匹配
re.findall
findall 函数会找到字符串中所有符合正则表达式规则的字符串,返回值是一个列表,如果没有匹配,就会返回一个空列表
1 | res1 = re.findall(pattern1, str) |
re.finditer
finditer 也是查找所有符合正则表达式规则的字符串,不同的是返回值,finditer 返回的是一个迭代器,用法如下
1 | for item in re.finditer(pattern1, str): |
小样例
常用的正则表达式:
1 | 1. Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ |