编辑:对不起,我只允许插入两个链接,其他链接在这里是纯文本。。
嗨,我是Python和regex的新手。我在regex101和许多其他网站上搜索了如何正确地使用它,但它只是不起作用,我不知道该怎么做。
我家里有一些IP摄像头,它们会发送ftp图片。它们的名称类似于(我从字符串中删除了MAC和串行):
为了每天释放一次空间,所有这些jpeg图片将被转换成一个mp4,而不是一个带有批处理文件(windows)的菜单编码器。这已经起作用了,但是在图像中没有刻录时间信息。这只是一张没有OSD的普通照片。
因此,我尝试制作一个.srt文件,在视频播放器中将时间和日期显示为字幕。因为我在学校刚学到C,所以我硬编码了一个丑陋的方法来产生它,我看了每个文件名,并手动搜索了字符串中的哪个部分决定了每个凸轮。例如,第一个凸轮总是以"image_“开头,第二个以凸轮的名称开头,第三个是文件名中的序列等等。
看起来是这样:
if(strstr(temp_line, "image")) //for the first cam
{ do extracting info }
else if(strstr(temp_line, "(UserNameOfCam)_")) //for the second
{ do extracting info }
else if(...
这是非常不灵活的,如果我想重命名第二凸轮,我必须改变源代码的srt发生器手动C,并重新编译它每次。
然后我想,“见鬼,让我们试试Python,它是为那样的脚本而制作的”,经过几天、几个小时的编程和谷歌搜索,我制作了这个脚本。然后我想用regex做这件事,因为它非常合适。
由于我是初学者,我使用调试器来可视化regex的生成,并使用pythex进行匹配。到目前为止,它还能识别出第一台相机,我很高兴:)但经过几个小时的尝试,它能识别出更多的模式,我不知道自己做错了什么。我尝试了\g the (?P=和许多其他方法),但都没有起作用。我做了一件完全错误的事,不知道是什么。
这是第一个凸轮的图案
Www.decggex.com/r/kvd5IZc760Z-cZmz
这是第一个凸轮的匹配
这是前两个凸轮不起作用的尝试
Www.decggex.com/r/C0TwsxHS9QZoXIFc
如果需要,下面是生成srt的Python脚本。
pastebin.com/kZPQnu9T
有什么提示或建议如何使它起作用,或者我在哪里做错了步骤?
EDIT2: --我忘了提到,我需要从正则表达式中提取信息,因为时间和日期是文件名中的存储区。
EDIT3:,谢谢你的回复。我认为把所有东西放在一个正则表达式中会使它更快,因为它必须解析多达100 k行。此外,我还试图从正则表达式中提取信息,因为可以将模式命名为像“年份”这样的组。年信息总是一样的,所以我想,我们把年份模式做一次,并在需要时重用它,然后提取也是handled....though --它不是那样工作的。它可以从第一个摄像头中提取出所有有用的信息,但是如果我试图重复使用第一个凸轮的模式,那么第二个摄像头就不匹配了。"(?P=year)“线不匹配,如果我复制它与第一个凸轮同一行,它有一个错误,因为年份组现在是双倍。不过,如果我去掉第一个凸轮的整个图案就行了。
发布于 2016-10-02 18:31:21
你不需要做一个巨大的准则来匹配所有的东西。更好的做法是做几个更小的正则表达式来匹配特定的相机。
所以,如果你想要处理相机1和相机2一样,你的代码可能会像这样。
import re
cam1 = re.compile(r'some regex')
cam2 = re.compile(r'something else')
if cam1.match(filename) and cam2.match(filename):
process_data()
另外,只有当您想从regex中提取信息时,才需要分组。否则,分组并不是真正需要的(除非您希望使正则表达式更易读)。
https://stackoverflow.com/questions/39820159
复制相似问题