正则表达式,re模块

正则表达式

测试地址:https://regex101.com/

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

正则表达式,re模块

^:开头
$:结尾
比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$。

字符转义
想查找deerchao.net ,需要将特殊符号转义 deerchao.net
想查找C:\Windows ,需要将特殊符号转义 C:\Windows

重复

正则表达式,re模块

Windows\d+匹配Windows后面跟1个或更多数字
^\w+匹配一行的第一个单词

11{1,3}:表示11出现1次至3次(111,1111,11111),比如输入1141114111411114

正则表达式,re模块

字符类

[aeiou]就匹配任何一个英文元音字母,[.?!]匹配标点符号(.或?或!)

[0-9]代表的含意与\d就是完全一致的:一位数字;同理[a-z0-9A-Z_]也完全等同于\w

(?0\d{2}[) -]?\d{8} :1、转义字符( 出现0次或者1次(?) 2、跟着0 然后跟着2个数字(\d{2})3、然后是 )或者空格 或者 - 中的一个[) -] ,出现0次或者1次(?)
4、后面跟着8个数字(\d{8})

分枝条件
刚才那个表达式也能匹配010)12345678或(022-87654321这样的“不正确”的格式。要解决这个问题,我们需要用到分枝条件。正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开

0\d{2}-\d{8}|0\d{3}-\d{7}:这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。

分组

(\d{1,3}.){3}\d{1,3}:1、表示(\d{1,3}.) 是一个分组 数字重复出现1,3次,. 表示转义 2、{3} 表示重复3次 2、\d{1,3}:重复前面的数字1,3次
\d:1到9

反义

有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义:

正则表达式,re模块

例子:\S+匹配不包含空白符的字符串。

<a[^>]+>匹配用尖括号括起来的以a开头的字符串。

re模块

re.match函数
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none

函数语法:
re.match(pattern, string, flags=0)

例子1:
import re
s = "ab<h1>xxx</h1>dsafasdf<html>sdfads</html>"
reg = re.compile(r"(<(?P<tag>\w+)>(.*)</(?P=tag)>)")
print(reg.findall(s))

结果:
[('<h1>xxx</h1>', 'h1', 'xxx'), ('<html>sdfads</html>', 'html', 'sdfads')]

分析:1、compile方法是将正则编译成一个对象,效率比直接写正则表达式要高
2、r"" :表示双引号内的特殊字符不需要转义,如?,$号,不需要加上\
3、<?P<tag>\w> :表示将数据字母组成一个组名为tag
1、?P<name>命令一个组名为tag,后面调用就是?P=tag
2、\w:数字,字母
4、.*:贪婪模式 ,表示所有
5、findall 是将正则表达式中带有()的匹配,只要()里面的匹配到了就放到列表里

例子2:
s = "ab<h1>xxx</h1>dsafasdf<html>sdfads</html>"
reg = re.compile(r"(<(?P<tag>\w+)>(.*)</(?P=tag)>)")
print(reg.match(s))

结果为:None (没匹配到,因为s 是以ab开头的,正则表达式以<开头)

re.match与re.search的区别:

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配就返回。
例子:
s = "ab<h1>xxx</h1>dsafasdf<html>sdfads</html>"
reg = re.compile(r"(<(?P<tag>\w+)>(.*)</(?P=tag)>)")

print(reg.search(s).group(1)) #group(1):表示返回第一个括号的内容,group() 同group(0)就是匹配正则表达式整体结果

没有匹配成功的,re.search()返回None

split

p = re.compile(r'\d+')
print p.split('one1two2three3four4')

结果: ['one', 'two', 'three', 'four', '']

转载于:https://blog.51cto.com/jacksoner/2112543

一、数据采集层:多源人脸数据获取 该层负责从不同设备 / 渠道采集人脸原始数据,为后续模型训练与识别提供基础样本,核心功能包括: 1. 多设备适配采集 实时摄像头采集: 调用计算机内置摄像头(或外接 USB 摄像头),通过OpenCV的VideoCapture接口实时捕获视频流,支持手动触发 “拍照”(按指定快捷键如Space)或自动定时采集(如每 2 秒采集 1 张),采集时自动框选人脸区域(通过Haar级联分类器初步定位),确保样本聚焦人脸。 支持采集参数配置:可设置采集分辨率(如 640×480、1280×720)、图像格式(JPG/PNG)、单用户采集数量(如默认采集 20 张,确保样本多样性),采集过程中实时显示 “已采集数量 / 目标数量”,避免样本不足。 本地图像 / 视频导入: 支持批量导入本地人脸图像文件(支持 JPG、PNG、BMP 格式),自动过滤非图像文件;导入视频文件(MP4、AVI 格式)时,可按 “固定帧间隔”(如每 10 帧提取 1 张图像)或 “手动选择帧” 提取人脸样本,适用于无实时摄像头场景。 数据集对接: 支持接入公开人脸数据集(如 LFW、ORL),通过预设脚本自动读取数据集目录结构(按 “用户 ID - 样本图像” 分类),快速构建训练样本库,无需手动采集,降低系统开发与测试成本。 2. 采集过程辅助功能 人脸有效性校验:采集时通过OpenCV的Haar级联分类器(或MTCNN轻量级模型)实时检测图像中是否包含人脸,若未检测到人脸(如遮挡、侧脸角度过大),则弹窗提示 “未识别到人脸,请调整姿态”,避免无效样本存入。 样本标签管理:采集时需为每个样本绑定 “用户标签”(如姓名、ID 号),支持手动输入标签或从 Excel 名单批量导入标签(按 “标签 - 采集数量” 对应),采集完成后自动按 “标签 - 序号” 命名文件(如 “张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值