通过正则表达式提取泰坦尼克号字幕里的所有台词
网上搜了一下看看有没有泰坦尼克号完整台词,找了好久也没找到合适的,要么不完整,要么收费,要么数据是错乱的,预期的台词是一个有中英文对照版的,然后按照格式一行行的排列,比如一行英文,一行中文,外加一行对应电影的时间
怎么办呢,想到了电影里的字幕,字幕里有数据的,数据格式也是统一的,我们利用正则提取一下就好了,开干
首先下载字幕,我在网上下载了一个,点击这个图片下载字幕文件:(点击这个图片,下载后把后缀名改成ssa就可以了)
然后查找文件里的规律,如下:
对于英文和中文有两种格式,对于英语来说,格式如下:
对于中文来说,格式如下:
思路
可以看到前面部分差不多的,后面的字幕之前有几个字符不一样,例如英文字幕是0000&}结尾的,而中文字幕是3000&}结尾的
我们可以用两个正则分别提取英语和中文的字幕信息,保存到对应的数组里,数组里的键名为字幕的时间,是个字符串格式,值可以是个数组,分别是对应的字幕
完整代码如下:
<?php $str = file_get_contents('./zimu.ssa'); //load ssa file function getResult($preg){ //get Subtitle interfaceglobal $str; $result = array();if(preg_match_all($preg,$str,$match,PREG_OFFSET_CAPTURE)){foreach($match[1] as $key => $val){$result[trim($val[0],',')]=$match[2][$key][0];}}return $result; }$result_en = getResult('/Marked=([^D]*).*?0000&}(.*)/'); //获取英文字幕 $result_cn = getResult('/Marked=([^D]*).*?3000&}(.*)/'); //获取中文字幕$result = array(); $result_en = array_filter($result_en,function($val,$key) use(&$result,&$result_cn){ //将字幕合并到$result数组里if(isset($result_cn[$key])){ $result[$key] = array($val,$result_cn[$key]);unset($result_cn[$key]);}elsereturn true; },ARRAY_FILTER_USE_BOTH );function out($arr,$isarr=1){ //out intefaceforeach($arr as $key => $val){if($isarr)echo $key."<br/>".$val[0]."<br/>".$val[1]."<br/><br/>";elseecho $key."<br/>".$val."<br/><br/>";} } out($result); //输出中文和英文有对应的字幕 out($result_en,0); //输出只有英文的字幕 out($result_cn,0); //输出只有中文的字幕 ?>
部分输出如下:
OK,It's Perfect~
下一篇贴出完整的字幕
正则里也遇到个问题,理想中[^D]改成[^(?:,D)]的话在getResult里就不需要调用trim()过滤掉末尾的,符号了,但是在php里(?:)不能用,可能php的正则引擎不支持这个功能吧,以后如果再深入研究的话再看看。
通过正则表达式提取泰坦尼克号字幕里的所有台词相关推荐
- linux获取中括号内容,shell里使用正则表达式提取括号中的内容
遇到个websphere MQ监控的问题,希望通过命令行的方式获取到MQ的一些状态: 1. su - mqm 使用mqm用户 2. dspmq 最简单的命令,查看队列控制器的状态: $ dspmq - ...
- C#正则表达式提取HTML中IMG标签的SRC地址(转)
一般来说一个 HTML 文档有很多标签,比如"<html>"."<body>"."<table>"等,想 ...
- 批量提取 srt 字幕文件中的文字
概要:相信经常与视频处理打交道的小伙伴对字幕文件一定不陌生.字幕文件一般来说会包含字幕序号.播放时间轴与具体的字幕内容,经常用于在视频播放的时候在对应的时间显示相应的字幕内容.字幕文件通常会有多种类型 ...
- 使用正则表达式提取文件中满足条件的内容
最近遇到需要处理一个很大文件的情况,需求是提取满足以`(ASCII 十进制 96)开头'结束的字符串,例如xxxxx`abcdedg'. 尝试在shell脚本中用正则表达式提取.有点曲折,后来通过py ...
- Jmeter关联,正则表达式提取器使用2
正则表达式的用处很多,最基础的用法 1,断言 2,传参(关联) 例子 1.http请求 2正则表达式提取,想要提取列表列中id,一遍打开列表页 如果是1,每次就会取相同的值!匹配数字的权限高于模板$0 ...
- jmeter 正则表达式提取器的使用(提取第一个匹配结果)
原文地址https://www.cnblogs.com/xueli/p/7405258.html?utm_source=itdadao&utm_medium=referral 正则表达式的用处 ...
- jmeter正则表达式提取器的用法和正则
我们再使用jmeter请求接口时,碰到一些业务流程性的接口改怎么办,比如,我一个发布内容的接口需要用到登录接口返回的token加到请求上去才能发布内容,那在jmeter上该是如何实现的咧? 这里介绍的 ...
- 正则表达式提取字符串中的手机号码
正则表达式提取字符串中的手机号码 1.正则表达式提取思路 1.先提取出来11位的数字组合 2.再判断这11位的数字组合是否符合要求 2.要用到的正则表达式功能 a.match() 用于提取()里面的符 ...
- Excel正则表达式提取公式示例之提取淘宝店铺名
熟悉正则表达式的小伙伴都知道,正则表达式常常用于从某段字符串中提取到想要的内容.而Excel网络函数库原有的正则表达式提取公式只支持提取表格中已有的数据.但是如何提取网页端的数据呢? 当有人问到这个问 ...
- JMeter关联:JMeter正则表达式提取器与JSON提取器
JMeter使用正则表达式和JSON提取器实现关联 前言 1 关联的释义与示例 2 常用正则表达式详解 3 正则表达式提取器 3.1 参数详解 3.2 使用示例 4 JSON提取器 4.1 参数详解 ...
最新文章
- 进化算法_遗传算法相关资料
- Linux系统介绍(二)文件系统结构
- linux下网卡安装
- 20155327《Java程序设计》第二周学习总结
- python 如何安装软件包故障_Python安装软件包出错
- Spring学习4-面向切面(AOP)之Spring接口方式
- Apache Kylin中对上亿字符串的精确Count_Distinct示例
- MongoDB小结26 - 地理空间索引
- 微信小程序——聊天小程序(从搭建到结束)
- 亚马逊云科技 2022 年 3 月新服务新功能强势来袭
- SaaSpace:11种最佳免费会计软件工具
- 点扩散函数point spread function (PSF)
- ESP8266-Arduino网络编程实例-BME280传感器数据仪表显示
- 超键,候选键,主键,外键
- 请不要再轻视Git —— 我在工作中是如何使用 Git 的
- 这一份最全的TCP总结,请务必收下
- 哈佛职场情商课读书笔记
- 学习网络攻防,有什么渠道?
- dwmac/stmmac/eqos 远程唤醒(WOL) 驱动
- 程序员掉头发的原因找到了 | 每日趣闻
热门文章
- NeurIPS十年高引学者TOP100榜单发布!这些大牛值得膜拜!
- ERD-ONLINE 2.0.3 免费在线数据库建模工具 正式发布
- mstar Android解锁,液晶电视维修之Mstar方案从强刷包提取引导的方法
- Ubuntu Install Zhengma
- 面包机面包/蛋糕配方
- vs2019无法启动程序 系统找不到指定文件
- APK Multi-Tool(反编译工具)教程
- 使用itextpdf进行动态盖章,解决PDF页数不确定时签章位置变化问题
- java todo注释_Java自定义注解
- 数据结构练习题――中序遍历二叉树