正则表达式从字幕文件中删除空行和时间戳

时间:2018-05-15 11:05:41

标签: regex

我有一个下载的字幕文件,如下所示。该文件包含行号,空行和时间戳。我想删除这些行号,空行和时间戳,我只需要文本

现在是什么

1
00:00:01.876 --> 00:00:02.709
<v Instructor>We can go back now</v>

2
00:00:02.709 --> 00:00:05.042
to our web server checklist.

3
00:00:06.410 --> 00:00:08.722
We've already seen better ways to organise our code

4
00:00:08.722 --> 00:00:11.545
into reusable pieces with modules,

5
00:00:11.545 --> 00:00:13.315
we've seen ways to deal with files,

6
00:00:13.315 --> 00:00:15.940
both synchronous and asynchronous,

7
00:00:15.940 --> 00:00:16.773
and buffers,

8
00:00:16.773 --> 00:00:18.325
both the built-in Node one

9
00:00:18.325 --> 00:00:20.380
and the ES6 buffers,

10
00:00:20.380 --> 00:00:22.485
and we've seen a way to deal with work

输出应该是什么

我们现在可以回到我们的网络服务器清单。我们已经看到了更好的方法来组织我们的代码与模块可重用的部分,我们已经看到了处理文件的方法,包括同步和异步,以及缓冲区, -in Node one和ES6缓冲区,我们已经看到了处理工作的方法

伙计们请帮助我如何实现这一目标,我正在使用this在线工具来实现这一目标

5 个答案:

答案 0 :(得分:4)

您想要执行以下操作:

  1. 选择以数字或换行符开头的行。
  2. 选择行中的所有内容直至结束
  3. 同时选择行尾的换行符
  4. 以下正则表达式正是这样做

    ^[\d\n].*\n
    

    <强> Demo

    小免责声明:这将排除以数字开头的文字行

    输出

    <v Instructor>We can go back now</v>
    to our web server checklist.
    We've already seen better ways to organise our code
    into reusable pieces with modules,
    we've seen ways to deal with files,
    both synchronous and asynchronous,
    and buffers,
    both the built-in Node one
    and the ES6 buffers,
    and we've seen a way to deal with work
    

答案 1 :(得分:1)

您可以使用多个正则表达式 - 按顺序使用前一个正则表达式的结果。这里开发了 @YassinHajaj 答案(regexp删除数字和时间)以获得所需的输出

^[\d\n].*\n               remove numbers and times                             
\<\/?v.*?\>               remove <v> tag
\R                        join multi lines into one line

以下是此工具1中使用的正则表达式序列的链接 - &gt; 2 - &gt; 3

<强>输出

正是您想要的

我们现在可以回到我们的网络服务器清单。我们已经看到了使用模块将代码组织成可重用部分的更好方法,我们已经看到了处理文件的方法,包括同步和异步,以及缓冲区,内置节点1和ES6缓冲区,我们已经看到了处理工作的方法

答案 2 :(得分:1)

以下将选择包含文本的所有行(即使是最后一行):

^[a-zA-z]*.*(\n|\Z)$
  1. [a-zA-z]*选择以字符开头的所有行(零次或多次)
  2. .*任何字符(零次或多次)
  3. (\n|\Z)行尾或EOF
  4. 您可以在regex tester

    上查看

答案 3 :(得分:1)

根据您的具体需求,这应该是一个明确的正则表达式:import matplotlib.pyplot as plt import numpy as np from scipy.special import binom bernstein = lambda n, k, t: binom(n,k)* t**k * (1.-t)**(n-k) def bezier(points, num=200): N = len(points) t = np.linspace(0, 1, num=num) curve = np.zeros((num, 2)) for i in range(N): curve += np.outer(bernstein(N - 1, i, t), points[i]) return curve start_point = (25, 50) end_point = (50, 25) mid_point = (45, 45) nodes1 = np.array([start_point, mid_point, end_point]) curve1 = bezier(nodes1, num=32) plt.plot(curve1[:,0], curve1[:,1], color="red", ls="", marker="o", ms=3) plt.axis('scaled') plt.show()

作为对其他答案的改进,它甚至适用于以数字开头的行(目前的单个数字),匹配nnn:nnn格式。试试吧: https://regex101.com/r/din5tp/1/

但它远非完美。

有关其工作原理的解释,我建议使用该工具。

需要注意的是,任何正则表达式最终都会有弱点,除非您真正需要,否则我不建议这种复杂程度。

输出:

我们现在可以回到我们的网络服务器清单。我们已经看到了更好的方法来组织我们的代码到模块的可重用部分,我们已经看到了处理文件的方法,包括同步和异步和缓冲区,内置节点1和ES6缓冲区,我们已经看到了处理工作的方法

答案 4 :(得分:0)

^[(\d|\n)].*$

此模式会删除以数字

开头的所有空行