今天下载了个字幕文件,不过里面的分行太多,明明只是简单的一个不长句子,硬是被分成两行,于是我决定把这些分行全部去掉,字幕文件部分片段如下:
1 | 2 |
我希望完成后的效果如下:
1 | 2 |
字幕文件总行超过 6000 行,不可能手动去处理,于是打算通过编程解决,我打算用 Python。
首先定义一个字符变量:
1 | str = ''' |
现在的问题是如何匹配两个字母之间的换行同时只匹配 \n 而不匹配前后两个字母。
正则的零宽断言包括:
- (?=exp) 正向前瞻(Lookahead),后面是 exp 则匹配,或匹配 exp 前面的位置
- (?<=exp) 负向前瞻(Lookbehind),前面是 exp 则匹配,或匹配 exp 后面的位置
- (?!exp) 正向后瞻(Negative Lookahead),后面不是 exp 则匹配,或匹配前面不是 exp 的位置
- (?<!exp) 负向后瞻(Negative Lookbehind),前面不是 exp 则匹配,或匹配后面不是 exp 的位置
注意:JavaScript 不支持正则后瞻。
比如你要获取一对标签间的内容,比如 <p>Hello world</p>
,这时可以用 (?<=<p>)(.*)(?=<\\p>)
来获取。
现在来解决字幕的问题,先写好正则模式:
1 | import re |
接下来使用 re.sub() 进行替换:
1 | convertStr = re.sub(patter, ' ', str) |
对于整个字幕文件也是如此,先打开字幕文件,获取内容,对内容进行替换,然后将替换完成的结果写入一个新的文件(不直接在原文件操作是个好习惯),完成的代码如下:
1 | import re |
参考: