目录
一、正则表达式初印象
在 Python 的世界里,正则表达式堪称文本处理的 “瑞士军刀”,功能强大且应用广泛。它就像是一个超级搜索工具,能按照你设定的规则,在复杂的文本中精准定位、提取信息,还能对文本进行高效的清洗和转换 。
举个例子,在数据挖掘时,从大量杂乱无章的网页内容里提取关键数据,如新闻网站中的文章标题、正文、发布时间;在数据清洗环节,处理用户输入的不规范数据,像将各种格式的电话号码统一为标准格式;还有在日志分析时,从海量的系统日志中筛选出特定时间、特定类型的记录,这些场景中,正则表达式都能大显身手,让繁琐的文本处理工作变得轻松高效 。
二、基本语法大揭秘
正则表达式的语法是其强大功能的基石,理解这些语法规则,能让你更灵活地驾驭正则表达式。接下来,我们就深入探索正则表达式的基本语法。
2.1 普通字符与特殊字符
在正则表达式里,普通字符就是那些所见即所得的字符,像字母(a - z、A - Z)、数字(0 - 9)以及大部分标点符号 。它们在匹配时,就和自身一模一样。比如,正则表达式python就能精准匹配字符串中的python这个单词 。
而特殊字符则被赋予了特殊的含义和功能,是正则表达式的 “魔法钥匙”。比如,点号(.)可以匹配除换行符\n以外的任意单个字符。假设我们要匹配a和b中间有任意一个字符的情况,就可以使用a.b这个正则表达式 ,像acb、aeb都能成功匹配 。
2.2 字符类
字符类是正则表达式中的一个重要概念,它允许我们定义一组字符,只要匹配的字符属于这个集合,就算匹配成功。例如,[aeiou]表示匹配任意一个元音字母,当我们对字符串apple使用这个正则表达式时,就会匹配到其中的a 。
还有一些预定义的字符类,它们是正则表达式为我们提供的便捷工具 。比如,\d表示匹配任意一个数字字符,等同于[0 - 9] ,如果要匹配一个数字字符串123,用\d+就可以实现(这里+表示前面的字符出现一次或多次,后面会详细讲解) ;\s表示匹配任意一个空白字符,包括空格、制表符、换行符等;\w表示匹配字母、数字和下划线 ,即[a-zA-Z0 - 9_] 。
2.3 重复限定符
重复限定符用于控制字符或字符组出现的次数 。常见的重复限定符有*、+、?和{n}、{n,}、{n,m} 。*表示匹配前面的字符零次或多次,比如ab*,可以匹配a(此时b出现零次),也能匹配ab、abb、abbb等(b出现多次) ;+表示匹配前面的字符一次或多次,ab+就只能匹配ab、abb、abbb等(至少有一个b),无法匹配只有a的情况 ;?表示匹配前面的字符零次或一次 ,ab?可以匹配a(b出现零次)和ab(b出现一次),但不能匹配abb 。
而{n}表示前面的字符恰好出现n次,{n,}表示至少出现n次 ,{n,m}表示出现次数在n到m次之间(包括n和m) 。例如,ab{2,4},可以匹配abb(b出现 2 次)、abbb(b出现 3 次)、abbbb(b出现 4 次),但无法匹配ab(b出现 1 次)和abbbbb(b出现 5 次) 。
这里还要注意贪婪模式和非贪婪模式 。默认情况下,重复限定符是贪婪的,也就是尽可能多地匹配字符 。比如对于字符串aaaaab,使用正则表达式a+匹配,会匹配到整个aaaaa 。但如果在重复限定符后面加上?,就变成了非贪婪模式,会尽可能少地匹配字符 ,同样对于aaaaab,使用a+?匹配,就只会匹配到一个a 。
2.4 边界匹配
边界匹配符用于指定匹配的边界位置 ,让我们可以精准定位字符串中的特定位置 。常见的边界匹配符有^、$、\b和\B 。^表示匹配字符串的开头,例如^Hello,只有以Hello开头的字符串才能匹配成功,像Hello world可以匹配,而world Hello就不行 ;$表示匹配字符串的结尾,world$就只能匹配以world结尾的字符串,如Hello world,而Hello world!则不匹配 。
\b表示匹配单词边界,单词边界指的是一个字母、数字或者下划线与一个非字母、数字或者下划线之间的位置 。比如,要匹配单词cat,使用\bcat\b,在字符串a cat sat中能成功匹配,但在concatenate中就不会匹配,因为这里的cat不是独立的单词 ;\B表示匹配非单词边界 ,cat\B在concatenate中就能匹配到cat ,因为它处于非单词边界位置 。
三、Python 中的 re 模块
在 Python 里,要使用正则表达式,就离不开re模块,它就像是开启正则表达式强大功能大门的钥匙 。re模块提供了一系列函数和方法,让我们能轻松地利用正则表达式对文本进行各种处理 。
3.1 模块导入与常用函数
使用re模块前,得先导入它,最常见的导入方式就是import re 。这样,我们就能使用re模块里的各种函数了 。