news 2026/4/15 7:51:39

python项目实战11-正则表达式基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python项目实战11-正则表达式基础

1.正则表达式:是一种用特定语法规则组成的字符串模式,用来描述、匹配或替换文本中符合某种规则的字符序列,可以理解为是专门用于文本处理的“高级查找和匹配公式”。

(1) 字符串前的r标识什么意思?

r 表示当前这个字符串中的转义字符无效,作为普通字符串使用

(2) re模块提供的如下三个函数的作用与区别 ?

match("正则表达式", "文本字符串"):从字符串的开头开始匹配

search("正则表达式", "文本字符串"):从任意位置开始,搜索第一个匹配项

findall("正则表达式", "文本字符串"):从任意位置开始,搜索所有匹配项

s1 = "18809090000是我的手机号, 你记住了吗? 我的另一个手机号是18800008888,两个QQ号分别是155998992 和 18809091293821 你记住了吗?"
s2 = "我的手机号是18809090000, 你记住了吗? 我的另一个手机号是18800008888,两个QQ号分别是155998992 和 18809091293821 你记住了吗?"

(1) match:从字符串的开头开始匹配(匹配第一个匹配项)

import re s1 = "18809090000是我的手机号, 你记住了吗? 我的另一个手机号是18800008888,两个QQ号分别是155998992 和 18809091293821 你记住了吗?" s2 = "我的手机号是18809090000, 你记住了吗? 我的另一个手机号是18800008888,两个QQ号分别是155998992 和 18809091293821 你记住了吗?" # match - 从字符串的开头开始匹配(匹配第一个匹配项) ----> Match 对象 # r"1[3-9]\d{9}" 表示第1位是1(1),第2位在3-9之间([3-9]),第3-11位为数字(\d{9}) # r"1[3-9]\d{9}" ==> "1[3-9]\\d{9}" 其中r表示字符串中的反斜杠为本身含义,而不是转义字符 result = re.match(r"1[3-9]\d{9}", s1) print(result.group()) # 获取到匹配的结果 print(result.span()) # 获取匹配项的索引 print(result.start()) # 获取匹配项的开始索引 print(result.end()) # 获取匹配项的结束索引

18809090000
(0, 11)
0
11

(2) search:从任意位置开始, 搜索第一个匹配项

# search - 从任意位置开始, 搜索第一个匹配项 ----> Match 对象 result = re.search(r"1[3-9]\d{9}", s2) print(result.group()) # 获取到匹配的结果 print(result.span()) # 获取匹配项的索引 print(result.start()) # 获取匹配项的开始索引 print(result.end()) # 获取匹配项的结束索引

18809090000
(6, 17)
6
17

(3) findall:从任意位置开始, 搜索所有匹配项

# findall - 从任意位置开始, 搜索所有匹配项 ---> list result = re.findall(r"1[3-9]\d{9}", s2) print(result)

['18809090000', '18800008888', '18809091293']

(4)

import re s1 = "18809090000是我的手机号,188开头的,以00结尾的;我的另一个手机号是15500008888,两个QQ号分别是1259989092和13809091293821,邮箱为python666@163.com,请给我发邮件。" # 正则表达式 print(re.findall(r"188.*", s1)) # * 匹配任何个 字符 print(re.findall(r"188.?", s1)) # ? 匹配0个或者1个 (最多出现一次) 字符 print(re.findall(r"188.+", s1)) # + 匹配1个或者多个 (最少出现一次) 字符

(1) ['18809090000是我的手机号,188开头的,以00结尾的;我的另一个手机号15500008888,两个QQ号分别是1259989092和13809091293821,邮箱为python666@163.com,请给我发邮件。']
(2) ['1880', '188开']
(3) ['18809090000是我的手机号,188开头的,以00结尾的;我的另一个手机号是15500008888,两个QQ号分别是1259989092和13809091293821,邮箱为python666@163.com,请给我发邮件。']

(5)

print(re.findall(r"188\d{8}", s1)) # {8} 匹配8个 数字 print(re.findall(r"155\d{6,10}", s1)) # {6,10} 匹配6到10个 数字 print(re.findall(r"155\d{6,}", s1)) # {6,} 匹配6个或者更多 数字

['18809090000']
['15500008888']
['15500008888']

(6)

print(re.findall(r"1[38]\d{8}", s1)) # [38] 匹配3或者8 print(re.findall(r"1[^38]\d{8}", s1)) # [^38] 匹配非 3或者8 print(re.findall(r"1[3-9]\d{8}", s1)) # [3-9] 匹配3到9 (范围) print(re.findall(r"^1[3-9]\d{9}", s1)) # ^ 匹配开头 print(re.findall(r"^1[3-9]\d{9}$", s1)) # $ 匹配结尾

['18809090000']
['15500008888']
['15500008888']

(7)

print(re.findall(r"1[38]\d{8}", s1)) # [38] 匹配3或者8 print(re.findall(r"1[^38]\d{8}", s1)) # [^38] 匹配非 3或者8 (既不是3也不是8) print(re.findall(r"1[3-9]\d{8}", s1)) # [3-9] 匹配3到9 (范围) print(re.findall(r"^1[3-9]\d{9}", s1)) # ^ 匹配开头 (以1开头) print(re.findall(r"^1[3-9]\d{9}$", s1)) # $ 匹配结尾 (以1为字符串开头,任意数字结尾)

['1880909000', '1380909129']
['1550000888', '1259989092']
['1880909000', '1550000888', '1380909129']
['18809090000']
[]

(8)

# \w 匹配任何单词字符(a-z、A-Z、0-9、_、其它语言字符) -- 默认行为 # r"\w+@\w+\.\w+" 表示 以任意个字符开头(\w+),中间必须有一个@(@),后面再有任意个字符(\w+),再有一个. (\.),最后有任意个字符(\w+) print(re.findall(r"\w+@\w+\.\w+", s1)) # \w 匹配任何单词字符(a-z、A-Z、0-9、_) # re.ASCII 表示只会匹配ASCII(不会匹配到中文,韩文等字符) print(re.findall(r"\w+@\w+\.\w+", s1, re.ASCII))

['邮箱为python666@163.com']
['python666@163.com']

(9)

s2 = "现在的时间是2026-02-06 10:05:25, 今天的天气还可以, 气温是28度 " print(re.findall(r"\d{4}-\d{2}-\d{2}", s2)) print(re.findall(r"(\d{4})-(\d{2})-(\d{2})", s2))

['2026-02-06']
[('2026', '02', '06')]

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 7:51:15

告别复杂编译!vLLM-v0.17.1镜像一键部署,小白也能快速搭建LLM服务

告别复杂编译!vLLM-v0.17.1镜像一键部署,小白也能快速搭建LLM服务 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库,最初由加州大学伯克利分校的天空计算实验室开发,现已发展成为社区驱动的开源项目。…

作者头像 李华
网站建设 2026/4/15 7:51:15

Local SDXL-Turbo实操手册:从键盘输入到画面生成的完整链路

Local SDXL-Turbo实操手册:从键盘输入到画面生成的完整链路 1. 什么是Local SDXL-Turbo? Local SDXL-Turbo是一个基于StabilityAI SDXL-Turbo构建的实时绘画工具。与传统的AI绘画工具需要等待几分钟生成不同,这个工具实现了真正的"打字…

作者头像 李华
网站建设 2026/4/15 7:47:09

AI 辅助编程浪潮下,开发者如何平衡使用与责任?

接受改变 编程曾经很有趣,如今工具变了,AI 迫使开发者做出改变。作者曾用 GitHub Copilot 实现代码补全和生成,首次真正体验 AI 辅助开发是在 Codex 上。起初完全依赖 Codex 让作者迷茫,后采用“逐提交质量检查的 AI 辅助”方法&a…

作者头像 李华
网站建设 2026/4/15 7:41:12

2026届学术党必备的五大降AI率助手推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 涉及DeepSeek系列论文的阐述方面,大规模语言模型的高效训练与推理方法被系统地进…

作者头像 李华
网站建设 2026/4/15 7:37:33

YOLOv8从训练到部署:在Jetson Nano上实现30FPS实时目标检测

YOLOv8从训练到部署:在Jetson Nano上实现30FPS实时目标检测 当智能摄像头需要识别街头的每一辆汽车,当无人机要在毫秒间避开高压电线,边缘计算设备上的实时目标检测技术便成为关键胜负手。Jetson Nano作为NVIDIA面向嵌入式场景的经典计算平台…

作者头像 李华
网站建设 2026/4/15 7:34:11

系统设计原则

单一职责原则 一个类或者模块只负责完成一个职责或者功能。也就是说在类的设计中,我们不要设计大而全的类,而是要设计粒度小、功能单一的类。可以通过几个点来分析类的职责是否单一:1. 类中的代码行数、属性或方法是否过多;…

作者头像 李华