Python 正则表达式入门从匹配手机号到提取文本内容一、前言为什么要学正则表达式在日常Python开发、数据处理、爬虫工作中我们经常会遇到这些高频需求从杂乱文本中精准提取手机号、邮箱、身份证批量替换文本中的数字、特殊符号、敏感词按照多种不规则分隔符拆分字符串校验用户输入的账号、密码、网址格式是否合法提取简单HTML、文本标签中的核心内容普通字符串方法只能处理规则固定的简单场景而正则表达式可以通过一套通用规则适配所有复杂文本处理场景是Python文本处理的必备核心技能。Python 内置re 模块无需额外安装开箱即用本文从零带你吃透正则基础手把手实现实战案例。二、环境准备导入re模块Python 正则操作全部依赖内置re模块使用前只需导入即可importrere是 regular expression 的缩写核心作用自定义字符规则实现字符串的匹配、查找、替换、分割。三、五大核心方法实战零基础必掌握3.1 re.search()查找第一个匹配项作用扫描整个字符串返回第一个匹配成功的结果匹配失败返回None。核心注意必须判断结果非空后再调用.group()获取匹配内容避免报错。案例1文本中提取手机号importre text我的手机号是 13812345678邮箱是 testexample.com# 手机号正则1开头第二位3-9后接9位数字phonere.search(r1[3-9]\d{9},text)ifphone:print(f找到手机号{phone.group()})# 输出找到手机号13812345678正则规则解析1手机号固定以1开头[3-9]第二位数字范围3-9符合国内手机号规则\d{9}匹配9位数字剩余手机号位数案例2文本中提取邮箱importre text我的手机号是 13812345678邮箱是 testexample.comemailre.search(r\w\w\.\w,text)ifemail:print(f找到邮箱{email.group()})# 输出找到邮箱testexample.com邮箱正则规则解析\w匹配1个及以上字母、数字、下划线邮箱用户名精准匹配邮箱固定符号\w匹配域名主体\.转义匹配点号正则中.是任意字符必须转义才是普通点\w匹配邮箱后缀com、cn、net等3.2 re.findall()查找所有匹配项批量提取作用查找字符串中所有匹配内容以列表形式返回无匹配则返回空列表是批量提取文本的高频方法。案例批量提取文本中所有数字价格importre text商品价格100元、200元、350元、89.9元# \d 匹配连续数字pricesre.findall(r\d,text)print(prices)# 输出[100, 200, 350, 89, 9]适合场景批量提取数字、关键词、特殊格式文本比循环匹配效率高10倍以上。3.3 re.sub()正则替换字符串作用根据正则规则匹配内容批量替换为指定字符完美解决普通replace无法处理的模糊替换场景。语法re.sub(pattern, replacement, string)pattern正则匹配规则replacement替换后的内容string需要处理的原字符串案例批量隐藏日期数字importre text今天是2026年02月19日订单编号20260219001# 所有连续数字替换为Xresultre.sub(r\d,X,text)print(result)# 输出今天是X年X月X日订单编号X3.4 re.split()多分隔符拆分字符串痛点Python原生split()仅支持单一分隔符无法处理不规则分隔的文本。解决方案re.split()支持多分隔符、不规则空白拆分。案例拆分含分号、逗号、空格的文本importre text张三;李四,王五 赵六 钱七;孙八# 匹配分号、逗号、空白字符多个分隔符合并拆分namesre.split(r[;,\s],text)print(names)# 输出[张三, 李四, 王五, 赵六, 钱七, 孙八]规则解析[;,\s][]字符集合匹配集合内任意一个字符; , \s分别匹配分号、逗号、空白字符空格、换行、制表符匹配1个及以上连续字符避免拆分空值3.5 re.match()精准校验文本格式作用从字符串开头严格匹配适合做格式校验手机号、邮箱、账号必须整串符合规则才会匹配成功。核心搭配^开头$结尾实现全局精准校验。案例1完整手机号格式校验importre# 全局手机号校验规则phone_patternr^1[3-9]\d{9}$print(re.match(phone_pattern,13812345678))# 匹配成功print(re.match(phone_pattern,138123456))# 位数不足匹配失败print(re.match(phone_pattern,23812345678))# 开头错误匹配失败案例2通用邮箱格式校验importre# 适配绝大多数常规邮箱格式email_patternr^[\w.-][\w-]\.[\w.]$print(re.match(email_pattern,testexample.com))# 合法print(re.match(email_pattern,test123qq.com))# 合法print(re.match(email_pattern,test.com))# 非法提示业务简单格式校验可使用该正则正式生产邮件校验需结合发送验证。四、进阶实战提取HTML标签内容利用正则分组非贪婪匹配可快速提取简单HTML标签文本适合轻量文本解析。importre htmlh1Python正则入门教程/h1p零基础快速掌握正则用法/p# 分组匹配标签内容? 开启非贪婪匹配contentsre.findall(r\w(.*?)/\w,html)print(contents)# 输出[Python正则入门教程, 零基础快速掌握正则用法]核心规则解析\w匹配任意HTML开始标签(.*?)分组非贪婪匹配精准提取标签内文本核心避免多标签串匹配/\w匹配任意HTML结束标签重要提醒正则仅适合简单静态HTML片段复杂爬虫解析请使用 BeautifulSoup、lxml 专业库。五、正则基础符号速查表收藏必备正则符号详细含义.匹配任意单个字符换行符除外\d匹配任意数字等价于 [0-9]\D匹配任意非数字字符\w匹配字母、数字、下划线\W匹配非字母、非数字、非下划线\s匹配空白字符空格、换行、制表符\S匹配非空白字符^匹配字符串开头$匹配字符串结尾*匹配前面字符 0次或多次匹配前面字符 1次或多次?匹配前面字符 0次或1次开启非贪婪匹配{n}精准匹配前面字符 n 次{n,m}匹配前面字符 n~m 次[]字符集合匹配集合内任意单个字符()分组匹配精准提取分组内内容六、五大核心方法选型指南新手不用死记硬背根据需求直接选方法适用场景re.search()查找第一个匹配内容re.match()字符串整体格式校验从头匹配re.findall()批量查找所有匹配内容最常用re.sub()批量替换文本内容re.split()多分隔符、不规则文本拆分七、新手必看为什么正则前要加 r大家会发现所有案例中正则表达式都写为r\d原始字符串格式。核心作用r代表原生字符串屏蔽Python转义机制避免正则符号双重转义报错。如果不添加r复杂正则中的\d、\s容易被Python解析为转义字符导致正则规则失效。编码好习惯所有Python正则表达式统一使用r正则规则格式八、全文总结本文从零入门Python正则表达式覆盖开发90%基础场景核心知识点复盘掌握search/findall/sub/split/match五大核心方法适配查找、替换、拆分、校验全场景熟记\d、\w、\s、、*、?、^、$基础符号可完成绝大多数文本匹配手机号、邮箱、HTML内容提取为通用实战模板可直接复用正则优先使用r原始字符串规避转义问题简单文本解析用正则复杂网页解析用专业爬虫库正则看似是符号密码实则规则固定熟练后可以极大提升文本处理效率是Python数据分析、爬虫、自动化开发的必备技能
Python 正则表达式入门:从匹配手机号到提取文本内容
Python 正则表达式入门从匹配手机号到提取文本内容一、前言为什么要学正则表达式在日常Python开发、数据处理、爬虫工作中我们经常会遇到这些高频需求从杂乱文本中精准提取手机号、邮箱、身份证批量替换文本中的数字、特殊符号、敏感词按照多种不规则分隔符拆分字符串校验用户输入的账号、密码、网址格式是否合法提取简单HTML、文本标签中的核心内容普通字符串方法只能处理规则固定的简单场景而正则表达式可以通过一套通用规则适配所有复杂文本处理场景是Python文本处理的必备核心技能。Python 内置re 模块无需额外安装开箱即用本文从零带你吃透正则基础手把手实现实战案例。二、环境准备导入re模块Python 正则操作全部依赖内置re模块使用前只需导入即可importrere是 regular expression 的缩写核心作用自定义字符规则实现字符串的匹配、查找、替换、分割。三、五大核心方法实战零基础必掌握3.1 re.search()查找第一个匹配项作用扫描整个字符串返回第一个匹配成功的结果匹配失败返回None。核心注意必须判断结果非空后再调用.group()获取匹配内容避免报错。案例1文本中提取手机号importre text我的手机号是 13812345678邮箱是 testexample.com# 手机号正则1开头第二位3-9后接9位数字phonere.search(r1[3-9]\d{9},text)ifphone:print(f找到手机号{phone.group()})# 输出找到手机号13812345678正则规则解析1手机号固定以1开头[3-9]第二位数字范围3-9符合国内手机号规则\d{9}匹配9位数字剩余手机号位数案例2文本中提取邮箱importre text我的手机号是 13812345678邮箱是 testexample.comemailre.search(r\w\w\.\w,text)ifemail:print(f找到邮箱{email.group()})# 输出找到邮箱testexample.com邮箱正则规则解析\w匹配1个及以上字母、数字、下划线邮箱用户名精准匹配邮箱固定符号\w匹配域名主体\.转义匹配点号正则中.是任意字符必须转义才是普通点\w匹配邮箱后缀com、cn、net等3.2 re.findall()查找所有匹配项批量提取作用查找字符串中所有匹配内容以列表形式返回无匹配则返回空列表是批量提取文本的高频方法。案例批量提取文本中所有数字价格importre text商品价格100元、200元、350元、89.9元# \d 匹配连续数字pricesre.findall(r\d,text)print(prices)# 输出[100, 200, 350, 89, 9]适合场景批量提取数字、关键词、特殊格式文本比循环匹配效率高10倍以上。3.3 re.sub()正则替换字符串作用根据正则规则匹配内容批量替换为指定字符完美解决普通replace无法处理的模糊替换场景。语法re.sub(pattern, replacement, string)pattern正则匹配规则replacement替换后的内容string需要处理的原字符串案例批量隐藏日期数字importre text今天是2026年02月19日订单编号20260219001# 所有连续数字替换为Xresultre.sub(r\d,X,text)print(result)# 输出今天是X年X月X日订单编号X3.4 re.split()多分隔符拆分字符串痛点Python原生split()仅支持单一分隔符无法处理不规则分隔的文本。解决方案re.split()支持多分隔符、不规则空白拆分。案例拆分含分号、逗号、空格的文本importre text张三;李四,王五 赵六 钱七;孙八# 匹配分号、逗号、空白字符多个分隔符合并拆分namesre.split(r[;,\s],text)print(names)# 输出[张三, 李四, 王五, 赵六, 钱七, 孙八]规则解析[;,\s][]字符集合匹配集合内任意一个字符; , \s分别匹配分号、逗号、空白字符空格、换行、制表符匹配1个及以上连续字符避免拆分空值3.5 re.match()精准校验文本格式作用从字符串开头严格匹配适合做格式校验手机号、邮箱、账号必须整串符合规则才会匹配成功。核心搭配^开头$结尾实现全局精准校验。案例1完整手机号格式校验importre# 全局手机号校验规则phone_patternr^1[3-9]\d{9}$print(re.match(phone_pattern,13812345678))# 匹配成功print(re.match(phone_pattern,138123456))# 位数不足匹配失败print(re.match(phone_pattern,23812345678))# 开头错误匹配失败案例2通用邮箱格式校验importre# 适配绝大多数常规邮箱格式email_patternr^[\w.-][\w-]\.[\w.]$print(re.match(email_pattern,testexample.com))# 合法print(re.match(email_pattern,test123qq.com))# 合法print(re.match(email_pattern,test.com))# 非法提示业务简单格式校验可使用该正则正式生产邮件校验需结合发送验证。四、进阶实战提取HTML标签内容利用正则分组非贪婪匹配可快速提取简单HTML标签文本适合轻量文本解析。importre htmlh1Python正则入门教程/h1p零基础快速掌握正则用法/p# 分组匹配标签内容? 开启非贪婪匹配contentsre.findall(r\w(.*?)/\w,html)print(contents)# 输出[Python正则入门教程, 零基础快速掌握正则用法]核心规则解析\w匹配任意HTML开始标签(.*?)分组非贪婪匹配精准提取标签内文本核心避免多标签串匹配/\w匹配任意HTML结束标签重要提醒正则仅适合简单静态HTML片段复杂爬虫解析请使用 BeautifulSoup、lxml 专业库。五、正则基础符号速查表收藏必备正则符号详细含义.匹配任意单个字符换行符除外\d匹配任意数字等价于 [0-9]\D匹配任意非数字字符\w匹配字母、数字、下划线\W匹配非字母、非数字、非下划线\s匹配空白字符空格、换行、制表符\S匹配非空白字符^匹配字符串开头$匹配字符串结尾*匹配前面字符 0次或多次匹配前面字符 1次或多次?匹配前面字符 0次或1次开启非贪婪匹配{n}精准匹配前面字符 n 次{n,m}匹配前面字符 n~m 次[]字符集合匹配集合内任意单个字符()分组匹配精准提取分组内内容六、五大核心方法选型指南新手不用死记硬背根据需求直接选方法适用场景re.search()查找第一个匹配内容re.match()字符串整体格式校验从头匹配re.findall()批量查找所有匹配内容最常用re.sub()批量替换文本内容re.split()多分隔符、不规则文本拆分七、新手必看为什么正则前要加 r大家会发现所有案例中正则表达式都写为r\d原始字符串格式。核心作用r代表原生字符串屏蔽Python转义机制避免正则符号双重转义报错。如果不添加r复杂正则中的\d、\s容易被Python解析为转义字符导致正则规则失效。编码好习惯所有Python正则表达式统一使用r正则规则格式八、全文总结本文从零入门Python正则表达式覆盖开发90%基础场景核心知识点复盘掌握search/findall/sub/split/match五大核心方法适配查找、替换、拆分、校验全场景熟记\d、\w、\s、、*、?、^、$基础符号可完成绝大多数文本匹配手机号、邮箱、HTML内容提取为通用实战模板可直接复用正则优先使用r原始字符串规避转义问题简单文本解析用正则复杂网页解析用专业爬虫库正则看似是符号密码实则规则固定熟练后可以极大提升文本处理效率是Python数据分析、爬虫、自动化开发的必备技能