Python正则表达式提取车牌号
在Python中使用正则表达式(Regular Expressions)来提取车牌号是一个常见的任务,尤其是在处理车辆信息或进行图像识别后的文本处理时。中国的车牌号格式多种多样,但通常包含省份简称、英文字母和数字。以下是一个使用Python正则表达式来提取常见中国车牌号(包括新能源车牌)的示例代码。
1.简单代码示例
首先,我们需要导入re模块,这是Python中用于处理正则表达式的标准库。然后,我们可以编写一个函数来匹配并提取车牌号。
import re def extract_license_plates(text): """ 从给定的文本中提取车牌号。 支持普通车牌(如京A12345)和新能源车牌(如京AD12345F)。 :param text: 包含车牌号信息的字符串 :return: 提取到的车牌号列表 """ # 定义车牌号的正则表达式 # 普通车牌:[省份简称][A-Z][A-Z0-9]{4}[A-Z0-9挂学警港澳] # 新能源车牌:[省份简称][A-DF][A-Z0-9]{5}[DF][A-Z0-9挂学警港澳] plate_pattern = re.compile(r'[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z][A-Z](?:(?:[A-Z0-9]{5}[DF])|(?:[DF][A-Z0-9][A-Z0-9]{4}))[A-Z0-9挂学警港澳]') # 查找所有匹配的车牌号 plates = plate_pattern.findall(text) return plates # 示例文本
text = "今天在路上看到了一辆车牌号为京A12345的车和另一辆新能源车牌京AD12345F的车。" # 调用函数并打印结果
plates = extract_license_plates(text)
print("找到的车牌号:", plates)
注意
(1)正则表达式说明:
-
普通车牌号以省份简称开始,后面跟着一个大写字母,然后是5位数字或字母(最后一位可以是挂、学、警、港、澳等特殊字符)。
-
新能源车牌在省份简称后有一个特定的字母(A、D、F),然后是5位数字或字母,最后以D或F开头,再跟一个字符(同样可以是挂、学、警、港、澳等特殊字符)。
-
本示例中简化了省份简称的匹配,直接列出了所有可能的省份简称(如“京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领”),实际应用中可能需要更新或动态生成这部分内容。
(2)性能考虑:
-
如果需要处理大量的文本数据,考虑正则表达式的优化和性能影响。
-
正则表达式编写时,尽量保持简洁和精确,避免不必要的回溯和复杂匹配。
(3)实际应用:
-
在实际应用中,车牌号的格式可能会因地区、时间等因素有所不同,因此正则表达式需要根据实际情况进行调整。
-
如果车牌号信息来自图像识别结果,可能需要先对识别结果进行预处理(如去除噪点、归一化等),以提高正则表达式的匹配准确率。
2.进阶代码示例
以下是一个更详细的代码示例,它包含了处理多种情况的车牌号提取功能。这个示例中,我将对正则表达式进行微调以更好地匹配普通车牌和新能源车牌,并且会添加一些注释来解释代码的各个部分。此外,我还会在示例文本中增加一些复杂的情况来测试我们的函数。
import re def extract_license_plates(text): """ 从给定的文本中提取车牌号。 支持普通车牌(如京A12345)和新能源车牌(如京AD12345F)。 :param text: 包含车牌号信息的字符串 :return: 提取到的车牌号列表 """ # 定义车牌号的正则表达式 # 普通车牌:[省份简称][A-Z]([A-Z0-9]{5}[A-Z0-9挂学警港澳]) # 新能源车牌:[省份简称][A-DF]([A-Z0-9]{4}[DF][A-Z0-9挂学警港澳]) # 注意:这里简化了新能源车牌的正则,因为新能源车牌第二位可能不是字母D或F,但通常后面会有DF组合 # 为了更准确地匹配,我们可以将两个模式分开 normal_plate_pattern = r'[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-Z0-9]{5}[A-Z0-9挂学警港澳]' new_energy_plate_pattern = r'[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-DF][A-Z0-9]{4}[DF][A-Z0-9挂学警港澳]' # 合并为一个正则表达式,使用 | 表示“或” plate_pattern = re.compile(f'({normal_plate_pattern})|({new_energy_plate_pattern})') # 查找所有匹配的车牌号 plates = plate_pattern.findall(text) # 由于findall返回的是一个元组的列表,其中每个元组包含一个或多个匹配项(取决于正则表达式中有多少捕获组) # 在这个例子中,我们有两个捕获组,但只关心其中一个有值的情况(即匹配到的是普通车牌还是新能源车牌) # 因此,我们需要从每个元组中提取出实际的车牌号 clean_plates = [match[0] if match[0] else match[1] for match in plates] return clean_plates # 示例文本,包含多种车牌号
text = "今天在路上看到了车牌号为京A12345的燃油车,还有新能源车牌京AD12345F和一辆苏B23456警的警车。" # 调用函数并打印结果
plates = extract_license_plates(text)
print("找到的车牌号:", plates)
注意:
(1)我将新能源车牌的正则表达式进行了调整,以更准确地匹配新能源车牌的常见格式。但请注意,实际中的新能源车牌格式可能更加多样,因此这个正则表达式可能需要进一步调整以适应所有情况。
(2)在处理findall返回的结果时,我使用了列表推导式来遍历所有匹配项,并从每个元组中提取出实际的车牌号。这是因为当正则表达式中有多个捕获组时,findall会返回一个包含元组的列表,每个元组包含与每个捕获组相匹配的文本。在这个例子中,每个元组要么第一个元素有值(匹配到普通车牌),要么第二个元素有值(匹配到新能源车牌),因此我们使用条件表达式来从中提取出车牌号。
(3)示例文本中包含了多种车牌号,包括普通车牌、新能源车牌和特殊车辆(警车)的车牌,以测试函数的健壮性。
相关文章:
Python正则表达式提取车牌号
在Python中使用正则表达式(Regular Expressions)来提取车牌号是一个常见的任务,尤其是在处理车辆信息或进行图像识别后的文本处理时。中国的车牌号格式多种多样,但通常包含省份简称、英文字母和数字。以下是一个使用Python正则表达…...
视觉引导机械臂学习记录
首先是几个位置,拍照位、示教位、目标位置。 流程主要是 1.首先选取一个拍照位,相机扫描点云,通过点云质量进行选取。并且制作点云模板,进行配准,如果配准分数高则模板选取正确。 2.用相机拍灰度图像,并…...
插屏广告在游戏APP中广告变现的独特优势
插屏广告是目前全球移动应用变现的主要广告形式之一,其优势在于可以快速收回成本,又能适应于多数缺乏激励场景的应用。 插屏广告通常在app使用过程中的自然过渡点,比如暂停场景切换的时候弹出,以图片、动图、视频等为表现形式的半…...
Python数据分析:数据可视化(Matplotlib、Seaborn)
数据可视化是数据分析中不可或缺的一部分,通过将数据以图形的方式展示出来,可以更直观地理解数据的分布和趋势。在Python中,Matplotlib和Seaborn是两个非常流行和强大的数据可视化库。本文将详细介绍这两个库的使用方法,并附上一个…...
Java CompletableFuture:你真的了解它吗?
文章目录 1 什么是 CompletableFuture?2 如何正确使用 CompletableFuture 对象?3 如何结合回调函数处理异步任务结果?4 如何组合并处理多个 CompletableFuture? 1 什么是 CompletableFuture? CompletableFuture 是 Ja…...
5个免费在线 AI 绘画网站推荐,附100+提示词!
在数字化时代,艺术创作与人工智能的结合已带来前所未有的创新体验。AI 绘画技术,基于先进的人工智能算法,为艺术创作提供了全新的视角和工具。当前,多个免费在线AI绘画平台应运而生,为创作者们提供了丰富的灵感和创作机…...
C++基础语法:while的使用
前言 "打牢基础,万事不愁" .C的基础语法的学习."学以致用,边学边用",编程是实践性很强的技术,在运用中理解,总结. 引入 while的使用是编写代码的基础内容.笔者的记忆力已不如以前,最近遇到了还花了不少功夫,可见是掌握地不够牢固.所以对while的思路和内容…...
鹏哥C语言自定义笔记重点(29-)
29.函数指针数组 30.void指针是不能直接解引用,也不能-整数。 void*是无具体类型的指针,可以接受任何类型的地址。 31.qsort:使用快速排序的思想实现一个排序函数(升序) 32. 33.地址的字节是4/8 34.char arr[]{a,b} sizeof(arr[0]1)答案是4࿰…...
代码随想录算法训练营第六十天 | dijkstra(堆优化版)、Bellman_ford 算法精讲
一、dijkstra(堆优化版) 题目连接:47. 参加科学大会(第六期模拟笔试) (kamacoder.com) 文章讲解:代码随想录 (programmercarl.com)——dijkstra(堆优化版) 二、Bellman_ford 算法精讲…...
boost::asio 库版本,C/C++代码编译兼容性
1、boost::asio::spawn 开启有栈(stackful)协同程序,版本改进及限制 > boost_1_80 版本应采用以下方式。 auto f [self, this](const boost::asio::yield_context& y) noexcept {bool success_ do_handshake(y);if (!success_) {clo…...
前端开发的项目导入方法与应用
前端项目启动问题归集: 由于前端的项目对于npm的版本有要求,需要将其升级到20,所以必要的时候通过nvm,或者直接下载最新的安装包进行npm覆盖安装。在项目目录中应用npm i安装node_modules,如果没有正常安装的话&#…...
C++:模拟实现string
前言: 为了更好的理解string底层的原理,我们将模拟实现string类中常用的函数接口。为了与std里的string进行区分,所以用命名空间来封装一个自己的strin类。 string.h #pragma once #define _CRT_SECURE_NO_WARNINGS 1#include<iostream&…...
浅谈Kafka(一)
浅谈Kafka(一) 文章目录 浅谈Kafka(一)Kafa的设计是什么样的数据传输的事务定义消息队列的应用场景Kafka怎么样判断节点是否存活Kafka的消息是采用pull模式还是push模式Kafka在磁盘上的消息格式Kafka高效文件存储设计特点Kafka与传…...
Redis7基础篇(八)
redis集群 是什么 能干吗 集群算法-分片-槽位slot redis集群的槽位slot redis集群的分片 分片和槽位的优势 槽位映射的解决方案 上面的三个方案分别对应了小厂 中厂 大厂 哈希槽取余分区 缺点 一致性哈希算法分区 小总结 哈希槽分区 经典面试题 这里说的redis是ap而不是cp的 …...
Tauri简介
在Tauri应用中,Rust和前端(通常是基于Web技术如React、Vue或Angular)之间的交互是一个核心特性,它允许开发者利用Rust的强大功能和性能,同时保持前端开发的灵活性和丰富的生态系统。这种交互主要通过Tauri提供的API桥接…...
JavaWeb——MVC架构模式
一、概述: MVC(Model View Controller)是软件工程中的一种 软件架构模式 ,它把软件系统分为模型、视图和控制器三个基本部分。用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户…...
Excel求和方法之
一 SUM(),选择要相加的数,回车即可 二 上面的方法还不够快。用下面这个 就成功了 三 还有一种一样快的 选中之后,按下Alt键和键(即Alt)...
Windows Server 域控制服务器安装及相关使用
目录 1.将客户机加入域 2.安装域控制器 3.新建域用户 4.设置用户登录时间,账户过期时间 5.软件分发 编辑 6.换壁纸 7.OU与GPO的概念 域为集中控制,拿下域控是拿下目标的关键 以Windows Server 2022为例 1.将客户机加入域 前提:客…...
linux基础命令(超级详细)
Linux 系统提供了丰富的命令行工具,用于各种文件操作、系统管理和网络配置等任务。以下是一些常用的 Linux 基础命令: 一、 文件和目录操作 1. ls: 列出目录内容 ls 列出当前目录的文件和目录 ls -l 以长格式列出文件和目录,包…...
大模型笔记之-XTuner微调个人小助手认知
前言 使用XTuner 微调个人小助手认知 一、下载模型 #安装魔搭依赖包 pip install modelscope新建download.py内容如下 其中Shanghai_AI_Laboratory/internlm2-chat-1_8b是魔搭对应的模型ID cache_dir/home/aistudio/data/model’为指定下载到本地的目录 from modelscope im…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
Redis上篇--知识点总结
Redis上篇–解析 本文大部分知识整理自网上,在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库,Redis 的键值对中的 key 就是字符串对象,而 val…...
MyBatis-Plus 常用条件构造方法
1.常用条件方法 方法 说明eq等于 ne不等于 <>gt大于 >ge大于等于 >lt小于 <le小于等于 <betweenBETWEEN 值1 AND 值2notBetweenNOT BETWEEN 值1 AND 值2likeLIKE %值%notLikeNOT LIKE %值%likeLeftLIKE %值likeRightLIKE 值%isNull字段 IS NULLisNotNull字段…...
Centos 7 服务器部署多网站
一、准备工作 安装 Apache bash sudo yum install httpd -y sudo systemctl start httpd sudo systemctl enable httpd创建网站目录 假设部署 2 个网站,目录结构如下: bash sudo mkdir -p /var/www/site1/html sudo mkdir -p /var/www/site2/html添加测试…...
