我有一个文字/字幕文件,如下所示:
1
00:00:58,178 --> 00:00:59,327
Some text!
2
00:00:59,329 --> 00:01:01,819
<i>Some text</i>
3
00:01:40,512 --> 00:01:41,629
2350 some text.
4
00:01:41,631 --> 00:01:43,771
Some text.
现在我几乎想通了,如何匹配下面正则表达式的实际字幕行:
^([^\d^\n].*)
但是如果相同的实际字幕行以数字开头(例子中的第三个字幕)怎么办?所以现在我必须匹配那些以数字开头的行,只要它们稍后在行结束前的同一行中有字母表。
如何通过与上面使用的正则表达式结合来实现这一点?
答案 0 :(得分:2)
更新#1
此更新旨在带来巨大的性能提升
我认为字幕可以是多行:
^\d+:\d+:[^-]+-->.*\R+\K.+(?:\R.+)*(?=\s*(?:^\d+$|\z))
说明:
^\d+:\d+:[^-]+-->.* # Match time's line
\R+\K # One or more newlines (& forget all previous matched characters)
.+ # Match next immediate line
(?:\R.+)* # And continuing lines of subtitle (if any)
(?=\s*(?:^\d+$|\z)) # Up to a digit-only-line or end of input string
<强> Live demo 强>
答案 1 :(得分:1)
我建议采用一种方法,即忽略所有只是数字或等于SRT时间戳周期的行:
^(?!\d+$|\d{2}:\d{2}:\d{2},\d+ --> \d{2}:\d{2}:\d{2},\d+$).+
<强>详情:
^
- 开始行(?!
- 如果在右侧立即找到模式,则会导致匹配失败的否定前瞻的开始:
\d+$
- 1+位到行尾|
- 或\d{2}:\d{2}:\d{2},\d+ --> \d{2}:\d{2}:\d{2},\d+$
- -->
个分隔的时间戳)
- 前瞻的结尾.+
- 匹配整个非空行