Python 正则表达式基础与 re 模块核心用法
本文详细解析 Python 中正则表达式的基础语法及 re 模块的核心函数。通过对比 match 与 search 的扫描差异,演示 sub 替换与 compile 编译的实际操作,帮助开发者快速掌握文本模式匹配、数据提取与格式清洗的标准流程。
Python 正则表达式基础与 re 模块核心用法
正则表达式(Regular Expression)是用于描述文本匹配规则的通用语言。Python 内置的 re 模块提供了完整的正则引擎支持,能够将复杂的文本查找、验证与替换逻辑转化为简洁的代码。
第1步:掌握基础匹配规则
正则表达式的核心在于字符集合与量词的配合。常用基础语法如下:
.:匹配除换行符外的任意单个字符。例如.ython可匹配python或fython。[pj]:字符集,匹配括号内任意一个字符。[^abc]:反转字符集,匹配不在括号内的任意字符。|:选择符,表示“或”的关系,如a|b匹配 a 或 b。?:使左侧元素变为可选(出现 0 次或 1 次)。*、+、{m, n}:分别表示重复 0 次或多次、1 次或多次、m 到 n 次(默认贪婪模式)。
使用反斜杠 \ 可对元字符进行转义。例如 python\.org 将严格匹配字面量的网址后缀而非任意字符。
第2步:理解边界控制与预定义字符
精确匹配往往需要借助锚点与快捷字符组:
^与$:分别匹配字符串的开头与结尾。\b与\B:匹配与非单词边界(分界处指字母、数字、下划线与常规空格之间)。\d、\w、\s:等价于[0-9]、[a-zA-Z0-9_]及空白字符[\t\n\r\f]。组合首字母大写即为非匹配组。(re):捕获组,可将匹配结果单独提取供后续引用或反向分组调用。
re 模块关键函数实操
第3步:定位文本匹配——match 与 search
两者均返回匹配对象或 None,但扫描范围存在本质区别:
re.match(pattern, string):仅从字符串起始位置尝试匹配。若首部结构不符则直接返回None,不会向后扫描。re.search(pattern, string):扫描整个字符串,返回第一个成功匹配的片段对象。
import re
text = "www.runoob.com"
# match 仅在开头匹配
print(re.match("www", text).span()) # 输出: (0, 3)
print(re.match("com", text)) # 输出: None
# search 可在任意位置匹配
print(re.search("www", text).span()) # 输出: (0, 3)
print(re.search("com", text).span()) # 输出: (11, 14)
执行上述代码时,若需获取匹配的确切坐标,可通过返回对象的 .span() 方法查看起始与结束索引。若匹配失败,调用该方法前需先判空。
第4步:字符串替换与清理——sub
re.sub(pattern, repl, string) 可用于将所有符合模式的子串替换为指定内容。常用于日志清洗、隐私脱敏或格式标准化:
import re
phone_info = "2004-959-559 # This is Phone Number"
# 删除 Python 风格的行尾注释
num_clean = re.sub(r"#.*$", "", phone_info)
print("Cleaned Text:", num_clean)
# 移除所有非数字字符
only_digits = re.sub(r"\D", "", phone_clean)
print("Digits Only:", only_digits)
第5步:模式编译优化——compile
当同一正则规则需在循环或高频调用中反复使用时,直接使用顶层函数会引发重复的语法解析开销。应先用 re.compile(pattern) 预加载为正则表达式对象,再调用其实例方法:
import re
pattern_obj = re.compile(r"\d{3}-\d{3}")
result = pattern_obj.search("Call 123-456 or 789-012")
print(result.group()) # 输出: 123-456
编译后的对象同时提供 search、match、findall 等方法,业务逻辑与顶层函数完全一致,但运行效率更高且代码可读性更强。
以上就是 Python 正则表达式基础与 re 模块核心用法的详细内容,更多关于 Python 文本处理与自动化清洗的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









