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…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
