我正在检查我的字幕文件的格式是否正确。我正在寻找 3 个常见错误。
- 格式为"[00:01:22:00]"的时间戳 - 有时会忘记匹配的 ]。所以我想检查如果"["出现在一行上,它正好有上述格式的 11 个字符,然后是一个匹配的"]"常见错误是缺少匹配 ]
- 粗体和斜体 - 如果 ^B 或 ^I 出现在一行上,则它必须在同一行中具有匹配的 ^B 或 ^I。
- 如果 ^ 出现在一行上,则必须后跟 I 或 B
一个正则表达式,它执行所有这些操作:
^(.*[(?![0-9][0-9]:[0-9][0-9]:[0-9][0-9]:[0-9][0-9]]).*|.*^(?![BI]).*|([^^n]*^[^Bn])*[^^n]*^B([^^n]*^[^Bn])*[^^n]*|([^^n]*^[^In])*[^^n]*^I([^^n]*^[^In])*[^^n]*)$
只需在启用正则表达式的文本编辑器的搜索栏中输入它,它就会找到您的问题中定义的任何错误行。
我使用Notepad++(Windows)和TextWrangler(Mac)的查找功能对其进行了测试。它还应该与Python或任何其他支持负面展望的正则表达式风格一起使用。搜索时,请确保选中"正则表达式"或"grep"旁边的复选框或圆圈。请注意,此正则表达式不适用于 Linux grep,因为 grep 不支持 lookarounds。
它绝对不漂亮,但它实际上只是像^(rule1|rule2|rule3B|rule3I)$
一样将 4 个较小的正则表达式推到一起。
第一条规则是:
^.*[(?![0-9][0-9]:[0-9][0-9]:[0-9][0-9]:[0-9][0-9]]).*$
它匹配具有不属于 [00:00:00:00:00] 模式的"["的任何行,使用负前瞻。
第二条规则是:
^.*^(?![BI]).*$
它匹配任何带有"^"的行,而不是紧跟 B 或 I,再次使用负前瞻,以便它也会在行尾匹配。
第三条规则是嘟嘟囔囔:
^([^^n]*^[^Bn])*[^^n]*^B([^^n]*^[^Bn])*[^^n]*$
它将任何行与用于粗体的文字^B
的一个实例匹配。([^^n]*^[^Bn])*[^^n]*
部分匹配任何未^B
的内容,^B
部分匹配^B
。我已经包含了n
以防止记事本++中的多行匹配。如果您使用的是 grep 或任何已经在进行逐行正则表达式搜索的程序,则可以删除n
的。
只是第三条规则,用"I"代替"B"。