Python3 正则表达式
Python3 正则表达式
正则表达式(regular expression,也称为regex或regexp)是一种通用的文本模式匹配工具,可用于在任何文本中识别模式,并提取或替换这些模式。正则表达式特别适用于文本处理,如数据清洗、数据提取和数据验证等领域。
Python3 中的正则表达式模块是 re。该模块提供了一组函数和常量,可用于编译、匹配和处理正则表达式。
1.编译正则表达式
要使用正则表达式,需要先编译其模式。这可以通过 re.compile(pattern, flags=0) 实现。pattern是带有一个或多个转义序列的Python字符串,表示要匹配的模式。flags控制匹配的模式。例如,re.I表示忽略大小写,re.M表示使用多行模式。
2.匹配正则表达式
使用编译后的正则表达式对象的方法,如match()、search()和findall()等,可以在源文本中查找模式。
match()方法从字符串的开头位置开始匹配模式,并返回匹配对象。如果没有找到匹配项,则返回None。
search()方法在文本的任何位置查找模式。如果找到匹配项,则返回匹配对象。否则也返回None。
findall()方法返回源文本中所有匹配的字符串列表。
3.正则表达式模式语法
正则表达式是由特殊字符和普通字符组成的模式字符序列。特殊字符由一个反斜杠(\)后面跟着一个或多个字符组成。普通字符只是字符串中的任何字符,但可以被匹配的特殊字符来进行匹配。
3.1 特殊字符
简单案例:
\d 匹配任意数字,等价于[0-9]。
\D 匹配任意非数字字符。
\w 匹配字母或数字或下划线或汉字,等价于[A-Za-z0-9_\u4e00-\u9fa5]。
\W 匹配任意非字字母数字下划线或汉字。
\s 匹配任意空白字符,等价于[\t\n\r\f\v]。
\S 匹配任意非空白字符。
. 匹配除了换行符以外的任意字符。
^ 匹配字符串的开头。
$ 匹配字符串的结尾。
3.2 字符集
用[]表示。单个字符可以是任意普通字符或多个字符范围。例如,[1-9]表示1到9的任意数字,[a-zA-Z]表示任意大小写字母,[\u4e00-\u9fa5]表示任意汉字。
3.3 量词
量词指定前面的模式重复的次数。例如,+、*和?等。+表示前面的模式至少出现一次,*表示前面的模式出现零次或多次,? 表示前面的模式可以出现零次或一次,{n}表示前面的模式出现n次,{n,m}表示前面的模式出现n到m次。
3.4 分组
用()表示。可以将模式分为字符子集,并对子集应用量词。分组可用于捕获匹配项,也可用于非捕获分组。
例如,(abc)+表示匹配一个或多个 abc。
3.5 反向引用
在分组内使用\1、\2等表示对分组的反向引用。例如,(abc)\1表示匹配两个连续的 abc。
4.操作符
| 表示或操作符,用于在模式中分隔两个选择项。
() 表示分组操作符,用于将多个字符分组处理。
[] 表示字符集合,用于指定匹配一个字符的可能性。
^ 表示开始匹配文本的位置。
$ 表示结束匹配文本的位置。
. 表示匹配除换行符以外的任意字符。
- 表示匹配前一个字符零次或者多次。
- 表示匹配前一个字符一次或者多次。
? 表示匹配前一个字符零次或者一次。
{n} 表示匹配前一个字符n次。
{n,} 表示匹配前一个字符至少n次。
{n,m} 表示匹配前一个字符最少n次最多m次。
5.简单示例
匹配邮政编码:^[1-9]\d{5}$。
匹配IP地址: (([01]?\d?\d|2[0-4]\d|25[0-5]).){3}(([01]?\d?\d|2[0-4]\d|25[0-5]))。
匹配邮箱地址: ^([0-9a-zA-Z_]+)@([0-9a-zA-Z_]+).(com|cn)$。
6.总结
正则表达式是一种通用的文本匹配工具,Python3中的re模块提供了一组函数和常量,可用于编译、匹配和处理正则表达式。熟练掌握正则表达式模式语法是正则表达式的核心,常见匹配模式包括字符匹配、量词、反向引用等。在实际应用中,可以根据具体需求灵活运用正则表达式,例如匹配IP地址、手机号码等常用模式。