当前位置: 首页 > news >正文

Python 正则表达式 re 包

一、常见正则表达式符号

符号含义示例
.匹配任意单个字符(除了换行)r"a.c" 可匹配 "abc""a1c"
\d匹配任何数字(0-9)r"\d+" 匹配 "123""56"
\w匹配字母、数字或下划线r"\w+" 匹配 "hello_123"
\s匹配空格、制表符等r"\s+" 匹配 " "
\b匹配单词边界r"\bcat\b" 匹配 " cat "不匹配"category"
\B匹配非单词边界r"\Bcat\B" 匹配 "category"不匹配" cat "
^匹配字符串开头r"^abc" 只能匹配 "abc" 开头的字符串
$匹配字符串结尾r"xyz$" 只能匹配 "xyz" 结尾的字符串
*匹配 零次或多次r"ab*" 可匹配 "a""ab""abb"
+匹配 一次或多次r"ab+" 匹配 "ab""abb",但不匹配 "a"
?匹配 零次或一次r"ab?" 匹配 "a""ab"
{n}匹配 指定次数r"\d{4}" 匹配 "2024"
``逻辑
()分组匹配r"(abc)+" 匹配 "abc""abcabc"

二、基础函数功能

re.search():查找第一个匹配项,没有返回 None

text = "价格是 100 元"
match = re.search(r"\d+", text)
print(match.group())  # 输出: 100

re.findall():查找所有匹配项,没有返回空list

text = "苹果 5 元,香蕉 10 元"
matches = re.findall(r"\d+", text)
print(matches)  # 输出: ['5', '10']

re.match():匹配字符串开头,没有返回 None

text = "abc123"
match = re.match(r"abc", text)
print(match.group())  # 输出: abc

re.sub():替换匹配项

text = "手机号 123-456-7890"
new_text = re.sub(r"\d", "*", text)  # 替换所有数字
print(new_text)  # 输出: 手机号 ***-***-****

re.compile():预编译正则

pattern = re.compile(r"\d+")
matches = pattern.findall("价格是 50 元")
print(matches)  # 输出: ['50']

三、常用案例

邮箱格式校验

import redef is_valid_email(email):pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"return bool(re.match(pattern, email))email = "test@example.com"
print(is_valid_email(email))  # 输出: True

这是匹配邮箱地址的 正则表达式,我们拆解一下:

  • ^:匹配字符串开头。

  • [a-zA-Z0-9._%+-]+:邮箱的用户名部分,允许 字母、数字、点(.)、下划线(_)、百分号(%)、加号(+)、减号(-)

  • @:邮箱必须包含 @ 符号。

  • [a-zA-Z0-9.-]+:域名部分,允许 字母、数字、点(.)和连字符(-)

  • \.:必须包含 .(点),表示域名后缀

  • [a-zA-Z]{2,}$:邮箱后缀(如 .com.org),要求至少 2 个字母,如 comnetedu 等。

提取网页中的所有 URL

import retext = "访问 https://example.com 和 http://test.com 获取更多信息。"
urls = re.findall(r"https?://[a-zA-Z0-9./_-]+", text)
print(urls)  # 输出: ['https://example.com', 'http://test.com']

匹配电话号码

import redef extract_phone_numbers(text):pattern = r"\b\d{3}-\d{4}-\d{4}\b"return re.findall(pattern, text)text = "我的号码是 123-4567-8901,你的号码是 987-6543-2100。"
print(extract_phone_numbers(text))  # 输出: ['123-4567-8901', '987-6543-2100']

这是一条用于匹配 电话号码正则表达式

  • \b单词边界,确保匹配的电话号码是一个独立的文本片段,而不是嵌在其他字符中。

  • \d{3}:匹配 三个数字(区号或首部分,如 123)。

  • -:匹配 连字符 -

  • \d{4}:匹配 四个数字(电话号码的中间部分,如 4567)。

  • -:匹配 连字符 -

  • \d{4}:匹配 四个数字(电话号码的最后部分,如 8901)。

  • \b单词边界,确保完整匹配。

这套正则表达式要求电话号码的格式必须是 “xxx-xxxx-xxxx”,否则不会匹配。

去除多余的空格

import retext = "这是    一个    测试   句子。"
clean_text = re.sub(r"\s+", " ", text)
print(clean_text)  # 输出: "这是 一个 测试 句子。"

提取 HTML 标签中的内容

import rehtml = "<div>Hello, <b>World</b>!</div>"
content = re.findall(r"<.*?>(.*?)<.*?>", html)
print(content)  # 输出: ['Hello, ', 'World']
  • .*贪婪匹配,会匹配尽可能多的字符。

  • .*?非贪婪匹配,只匹配最小范围的字符,直到遇到 > 关闭标签。

相关文章:

  • 考研408-计算机组成原理冲刺考点(1-3章)
  • 使用 Vue3 + Webpack 和 Vue3 + Vite 实现微前端架构(基于 Qiankun)
  • BoxMOT:Yolov8+多目标跟踪方案_笔记1
  • 网络安全漏洞库科普手册
  • 实验研究 | 千眼狼高速摄像机驱动精密制造创新
  • 4G FS800DTU上传图像至巴法云
  • 发那科机器人(基本操作、坐标系、I/O通信)
  • STM32 ADC模数转换器
  • 雷池WAF的身份认证 - GitHub
  • DDoS 攻击如何防护?2025最新防御方案与实战指南
  • 利用 Google Earth Engine 探索江宁区 2010 - 2020 年 EVI 时空变化
  • 多模态大语言模型arxiv论文略读(四十六)
  • Docker网络架构深度解析与技术实践
  • 阿里语音处理工具ClearerVoice-Studio项目上手指南
  • 一种改进的YOLOv11网络,用于无人机视角下的小目标检测
  • Linux虚拟机无法重启网络
  • cURL 入门:10 分钟学会用命令行发 HTTP 请求
  • 【jceks】使用keytool和hadoop credential生成和解析jceks文件(无密码storepass)
  • Unity AI-使用Ollama本地大语言模型运行框架运行本地Deepseek等模型实现聊天对话(一)
  • 马井堂-大语言模型对教学的应用分析
  • 《中国奇谭》首部动画电影《浪浪山小妖怪》定档8月2日
  • 北汽蓝谷一季度净亏损9.5亿元,拟定增募资不超60亿元
  • 十四届全国人大常委会第十五次会议继续审议民营经济促进法草案
  • 新任海南琼海市委副书记陈明已主持市政府党组全面工作
  • 铁路上海站五一假期预计发送446万人次,同比增长8.4%
  • 六朝文物草连空——丹阳句容南朝石刻考察纪