Python之rex-plus包语法、参数和实际应用案例

Python之rex-plus包语法、参数和实际应用案例 一、rex‑plus 包概述rex‑plus是 Python 标准库re的轻量增强版主打分组精准替换、批量匹配、简化正则写法兼容re语法但更易用适合快速文本处理与数据清洗。核心定位对re的“人性化封装”保留原生正则能力新增按捕获组独立替换、一次性返回所有匹配含位置、简化非贪婪/分组语法。版本最新0.1.42022‑06‑06兼容 Python ≥3.6。许可证MIT免费商用。二、安装方法1. 标准安装推荐pipinstallrex-plus0.1.42. 国内源加速解决超时pipinstall-ihttps://mirrors.aliyun.com/pypi/simple/ --extra-index-url https://pypi.org/simple/ rex-plus3. 验证安装importrex_plusprint(rex_plus.__version__)# 输出 0.1.4三、核心功能、语法与参数1. 模块结构仅一个核心模块rex_plus常用函数rex_plus.sub(pattern, repls, string, count0, flags0)分组批量替换核心rex_plus.search_all(pattern, string, flags0)全局匹配返回所有 Match 对象rex_plus.match(pattern, string, flags0)同re.matchrex_plus.search(pattern, string, flags0)同re.searchrex_plus.findall(pattern, string, flags0)同re.findall2. 核心函数详解1sub()分组精准替换最大亮点语法rex_plus.sub(pattern,repls,string,count0,flags0)pattern正则表达式支持re所有语法如()捕获组、(?:)非捕获组repls列表长度捕获组数量每个元素对应替换该组的内容string原始字符串count替换次数默认0全部flags正则标志如re.IGNORECASE示例基础importrex_plus text卧室有一盏限行灯# 匹配 1 个捕获组 (限行)用 线型 替换resrex_plus.sub((限行)灯,[线型],text)print(res)# 卧室有一盏线型灯示例多组替换text我是程序员来自北京# 2 个捕获组(我是)、(北京)分别替换为 他是、上海resrex_plus.sub((我是).*(北京),[他是,上海],text)print(res)# 他是程序员来自上海2search_all()全局匹配含位置与文本语法rex_plus.search_all(pattern,string,flags0)返回Match 对象列表每个对象含span()起始/结束索引、text匹配内容示例text__a1bb2ccc3matchesrex_plus.search_all(r\d,text)forminmatches:print(m.span(),m.text)# 输出# (3, 4) 1# (6, 7) 2# (10, 11) 33. 正则语法兼容与增强完全兼容re语法支持\d、\w、.*?、(?Pname...)命名组等。增强点非捕获组(?:)可直接用于sub不参与替换列表计数。无需手动处理\转义原始字符串r仍推荐。四、8个实际应用案例案例1文本敏感词批量替换数据脱敏需求替换手机号、身份证号为***。importrex_plus text联系我13812345678身份证310101199001011234# 2个捕获组手机号、身份证号patternr(1[3-9]\d{9})|(\d{17}[\dXx])# 替换两个组均为 ***resrex_plus.sub(pattern,[***,***],text)print(res)# 输出联系我***身份证***案例2URL 提取与域名替换需求提取所有 URL并将http改为https。text访问 http://a.com 或 http://b.org# 捕获组1http组2域名patternr(http)://([\w.-]\.\w)# 替换组1为 https组2保留resrex_plus.sub(pattern,[https,r\2],text)print(res)# 输出访问 https://a.com 或 https://b.org案例3日志时间格式标准化需求将MM/DD/YYYY转为YYYY‑MM‑DD。log2025/12/31 错误01/05/2026 警告# 捕获组年、月、日patternr(\d{2})/(\d{2})/(\d{4})# 替换为 年‑月‑日resrex_plus.sub(pattern,[r\3,r\1,r\2],log)print(res)# 输出2025‑12‑31 错误2026‑01‑05 警告案例4HTML 标签属性提取与修改需求修改所有a标签的href为#。htmla hrefhttps://a.com链接/aa hrefb.html本地/a# 捕获组href 内的链接patternrhref([^])resrex_plus.sub(pattern,[#],html)print(res)# 输出a href#链接/aa href#本地/a案例5批量提取文本中的数字并求和需求提取所有整数并计算总和。text订单1100元订单2250元订单330元matchesrex_plus.search_all(r\d,text)nums[int(m.text)forminmatches]print(总和,sum(nums))# 总和 380案例6中文文本关键词高亮Markdown 加粗需求给指定关键词加**加粗。textPython 是一门简洁的语言Python 易学易用keywords[Python]patternr(|.join(keywords))resrex_plus.sub(pattern,[r**\1**],text)print(res)# 输出**Python** 是一门简洁的语言**Python** 易学易用案例7字符串格式化固定长度补零需求将数字转为 3 位不足补零如5→005。text编号5、12、123、4567# 匹配 1‑3 位数字patternr(\d{1,3})resrex_plus.sub(pattern,[lambdax:x.zfill(3)],text)print(res)# 输出编号005、012、123、4567案例8Markdown 图片链接转为 HTML 标签需求![alt](url)→img srcurl altalt。md![图片](https://a.jpg)、![头像](b.png)# 捕获组1alt组2urlpatternr!\[(.*?)\]\((.*?)\)resrex_plus.sub(pattern,[r\2,r\1],md)# 手动拼接 HTML或直接在 repls 构造resrex_plus.sub(pattern,[rimg src\2 alt\1],md)print(res)# 输出img srchttps://a.jpg alt图片、img srcb.png alt头像五、常见错误与解决方案1.ValueError: repls length not match groups原因repls列表长度 ≠ 捕获组数量非捕获组(?:)不计。解决核对pattern中()数量确保repls长度一致。# 错误2个捕获组repls 只有1个rex_plus.sub((a)(b),[X],ab)# 正确repls 长度2rex_plus.sub((a)(b),[X,Y],ab)# 输出 XY2.re.error: invalid regular expression原因正则语法错误如未闭合()、转义错误。解决用原始字符串r避免转义冲突。在线正则工具如 regex101验证表达式。3. 替换无效匹配不到内容原因正则不匹配、大小写不敏感未开、空格/换行未处理。解决加flagsrex_plus.IGNORECASE忽略大小写。用\s匹配空格/换行。4.search_all返回空列表原因无匹配项、正则贪婪导致匹配范围过大。解决用非贪婪模式.*?缩小匹配范围。六、使用注意事项性能底层基于re性能与原生re一致适合中小文本超大文本10MB建议分块处理。兼容性仅支持 Python 3.6不兼容 Python 2。非捕获组(?:)仅用于分组不参与repls计数适合无需替换的分组场景。命名捕获组支持(?Pname...)但sub仍按位置顺序替换不按名称。安全正则注入风险与re一致避免直接用用户输入构造正则需转义特殊字符如.、*、?。七、总结rex‑plus是轻量、易用的正则增强库核心价值在于分组精准替换大幅简化多组替换场景search_all可一次性获取所有匹配细节适合快速文本处理、数据清洗、日志分析等场景。其完全兼容re语法学习成本极低可无缝替换原生re。《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。全书共11章前6章涵盖深度学习基础包括张量运算、神经网络原理、数据预处理及卷积神经网络等后5章进阶探讨图像、文本、音频建模技术并结合Transformer架构解析大语言模型的开发实践。书中通过房价预测、图像分类等案例讲解模型构建方法每章附有动手练习题帮助读者巩固实战能力。内容兼顾数学原理与工程实现适配PyTorch框架最新技术发展趋势。