匹配中文的正则表达式: [\u4e00-\u9fa5]
前天我在看美剧《权力的游戏》的时候,发现没字幕,于是乎自己从网上下载字幕匹配到视频;发现网上的字幕都是比较全面的,中英双语字幕,但是对我来说,中文字幕是我不想要的,我要强迫自己只看英文字幕,但是在播放器设置上又无法只显示英文;所以只有通过修改字幕文件,将中文删除喽;
本以为一个正则表达式 * 就可以把中文给匹配掉的,但事情并没有那么简单,因为一般带中文的文件有GBK,Unicode,UTF-8,UTF-16……好几种。所以在读取文件和写入文件的时候都需要指定编码格式.
一开始我以为10集的字幕都是同一种编码格式的(Unicode)(可以通过另存为查看到文件的编码格式;),所以我就用unicode解析文件,发现第一个字幕文件可以修改成功,但是后来的9个字幕文件都出现了乱码;查看发现后面的几个文件的编码不是Unicode,有UTF-8和ANSI两种,这时候我就想了,怎么样可以通过一个程序得到一个文件的编码格式呢, 这时候就省力了,最后百度了一下,果然找到了答案;
1.字幕文件片段:
Dialogue: 0,0:54:02.00,0:54:04.86,*Default,NTP,0000,0000,0000,,我欠您一条命 先生\N{\fs16}I owe you my life, ser.{\r}
Dialogue: 0,0:54:04.90,0:54:06.53,*Default,NTP,0000,0000,0000,,我深感荣幸\N{\fs16}The honor is mine,{\r}
Dialogue: 0,0:54:06.57,0:54:08.77,*Default,NTP,0000,0000,0000,,女王陛下\N{\fs16}my queen.{\r}
Dialogue: 0,0:54:12.14,0:54:14.41,*Default,NTP,0000,0000,0000,,你认识他?\N{\fs16}You know this man?{\r}
Dialogue: 0,0:54:14.44,0:54:16.24,*Default,NTP,0000,0000,0000,,我认识他\N{\fs16}I know him{\r}
其中,我要去掉文件的中文字符;也就是介于0000,,和\N{\fs16}之间的这部分;
2.代码片段为:
niuStr = lineStr.replaceAll("(0000,,)(.*)[\u4e00-\u9fa5]*(.)*(\\\\N(\\{
\\\\fs16\\})*)", "$1");
其中