声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。
5.4 正则表达式
5.4.1 正则表达式
正则表达式的概念:
- 正则表达式是用来简洁表达一组字符串的表达式;
- 正则表达式简洁地反映了一组字符串的特征。
正则表达式的使用:为了使用正则表达式,要进行编译。编译:将符合正则表达式语法的字符串转换成正则表达式特征。
正则表达式的语法:正则表达式语法由字符与操作符构成,如:P(Y|YT|YTH|YTHO)?N,其中()、|与?均为操作符。
正则表达式常用操作符:
- .,表示任意单个字符;
- [],字符集,对单个字符给出取值范围,如:[abc]表示要么取a要么取b要么取c,[a-z]表示a到z单个字符;
- [],非字符集,对单个字符给出排除范围,如:[abc]表示非a或b或c的单个字符;
- #,前一个字符的0次或无限次扩展,如abc表示ab、abc、abcc、abccc……;
- +,前一个字符的1次或无限次扩展,如abc+表示abc、abcc、abccc……;
- ?,前一个字符的0次或1次扩展,如abc?表示ab、abc;
- |,两边表达式任意一个,如abc|def表示abc、def;
- {m},扩展前一个字符m次,如ab{2}c表示abbc;
- {m,n},扩展前一个字符m~n次,如ab{1,2}c表示abc、abbc;
- ,匹配字符串开头,如:abc表示以abc为首的字符串;
- , 匹配字符串结尾,如: a b c ,匹配字符串结尾,如:abc ,匹配字符串结尾,如:abc表示以abc为尾的字符串;
- (),分组标记,内部只能使用|操作符,如(abc)表示abc,(abc|def)表示abc、def;
- \d,数字,等价于[0-9];
- \w,单词字符,等价于[A-Za-z0-9]。
正则表达式的语法在各个语言中是通用的。
5.4.2 re库
python中提供了re库来支持正则表达式的使用。re是python的标准库,无须导入。
re库常用的功能函数有:
- re.search(),在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象;(在字符串中搜索与正则表达式一样的地方)
- re.Match(),从一个字符串的开始位置起匹配正则表达式,返回match对象;
- re.findall(),搜索字符串,以列表类型返回全部能匹配的子串;
- re.split(),将一个字符串按照正则表达式匹配结果进行分割,返回列表类型;
- re.finditer(),搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象;
- re.sub(),在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串。
正则表达式的类型是原生字符串类型raw。在使用正则表达式时,通常要使用原生字符串,这样做是为了避免使用普通字符串时需要处理转义字符的问题,而使正则表达式的语法变得臃肿。python中原生字符串的语法如下:
a = r'text'; # 在普通字符串前加r标识,即为原生字符串,原生字符串中的所有符号都是不发生转义的。
使用re库做正则匹配时,要注意两种匹配模式:
- 贪婪匹配:当一个正则表达式与一个给定字符串存在多个匹配时,re库默认取最长匹配,这种匹配方式称为贪婪匹配。
- 最小匹配:如果要取出的是最短的匹配结果,则称为最小匹配。使用最小匹配要加最小匹配操作符,常用的有:*?,前一个字符0次或无限次扩展,但获取最小匹配;+?,前一个字符1次或无限次扩展,但获取最小匹配;??,前一个字符0次或1次扩展,但获取最小匹配;{m,n}?,前一个字符m~n次扩展,但获取最小匹配。
更多关于re库的用法,可以在使用时详细查找资料。