Python正则表达式与re模块实战:分组、非捕获与提取技巧

巷口听风
巷口听风
发布时间:2026-10-15 | 2人浏览过
原创

本文深入解析Python中正则表达式与re模块的关系,详细讲解如何使用括号进行分组匹配、利用“或者”条件处理多类型数据,以及通过非捕获分组(?:)优化复杂字符串提取。结合电话号码与文件后缀等实例,展示group()与findall()的实际应用,帮助开发者掌握高效的数据清洗与提取技巧。

一、正则表达式基础

二、python re模块

需要明确区分的是,正则表达式是一种用于描述字符串模式的通用规则语言,而re是Python标准库中专门用于处理正则表达式的模块。两者概念不同,不可混淆。

以下通过具体示例进行说明:

需要注意的是,如果正则匹配返回的是匹配对象(Match Object),必须调用group()方法来获取具体的分组内容。

三、进阶

1、分组,使用()即可

028-888888

tel_num = "028-888888"
pattern_obj = re.compile("(\d{3})-(\d{6})")
res = re.match(pattern=pattern_obj, string=tel_num)
print("output: %s %s" % (res.group(1), res.group(2)))

output: 028 888888

2、使用分组时,还可以使用“或者”条件

muilt_types = """image.jpg
    image.jpeg
    image.png
    image.gif"""
pattern_obj = re.compile("(.jpg|.gif|.jpeg|.png)")
types = re.findall(pattern=pattern_obj, string=muilt_types)
print("output: {}".format(types ))

output: ['.jpg', '.jpeg', '.png', '.gif']

3、非捕获分组,(?:表达式) 从而捕获数据,还能进行分组功能

muilt_nums = """028-75855
01-75855
12345-75855
tel:75855"""
pattern_obj = re.compile("(?:\d{2}|\d{5}|tel)[\-:](\d{5})")
nums = re.findall(pattern=pattern_obj, string=muilt_nums)
print("output: {}".format(nums))

output: ['75855', '75855', '75855', '75855']

4、使用分组提取年月日

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注本站的更多内容!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表