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

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']
  • .*贪婪匹配,会匹配尽可能多的字符。

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

http://www.xdnf.cn/news/2561.html

相关文章:

  • 1.文档搜索软件Everything 的使用介绍
  • pdf.js移动端预览PDF文件时,支持双指缩放
  • uniapp实现统一添加后端请求Header方法
  • .NET8配置组件
  • Google Earth Engine 中地形晕渲图(Hillshade)的实现与应用
  • Java SE(4)——方法详解
  • Rust 学习笔记:关于切片的两个练习题
  • 复现:Mamba-UNet:降水临近预报的创新解决方案
  • LBS服务(基于位置的服务)与LLM(大型语言模型)交互功能分析
  • Vue+Echarts 3D地图效果
  • 配置扩展ACL
  • 前端连接websocket服务报错 Unexpected response code: 301
  • GTC2025全球流量大会:领驭科技以AI云端之力,助力中国企业出海破浪前行
  • Typecho博客使用阿里云cdn和oss:handsome主题进阶版
  • Vue 中局部指令(directives)的用法详解
  • STM32 RTC配置
  • JavaScript 中的类(Class)语法
  • Vue 组件通信方式总览
  • OpenCV 图形API(70)图像与通道拼接函数-----创建一个图像或矩阵(GMat)的副本的操作函数copy()
  • Maven多模块工程版本管理:flatten-maven-plugin扁平化POM
  • 打火机检测数据集VOC+YOLO格式925张1类别
  • 使用POI和EasyExcel使用导入
  • 实战指南:搭建AIRIOT全场景智慧养老管理平台系统全流程解析
  • 2025系统架构师---基于规则的系统架构风格‌
  • 【硬件系统架构】哈佛架构
  • Linux 内核网络协议栈中的关键数据结构:inet_skb_parm 与 ip_options
  • 媒体查询使用
  • 《Go 语言高并发爬虫开发:淘宝商品 API 实时采集与 ETL 数据处理管道》
  • 无刷空心杯电机及机器人灵巧手的技术解析与发展趋势
  • 关系型数据库的SQL语句