我正在检查我的字幕文件的格式是否正确。我正在寻找 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]*\^[^B\n])*[^\^\n]*\^B([^\^\n]*\^[^B\n])*[^\^\n]*|([^\^\n]*\^[^I\n])*[^\^\n]*\^I([^\^\n]*\^[^I\n])*[^\^\n]*)$
只需将其输入启用正则表达式的文本编辑器的搜索栏中,它就会找到您问题中定义的任何错误行。
我使用 Notepad++ (Windows) 和 TextWrangler (Mac) 的查找功能对其进行了测试。它还应该与 Python 或任何其他支持负前瞻的 Regex 风格一起使用。搜索时,请确保选中“正则表达式”或“grep”旁边的复选框或圆圈。请注意,此正则表达式不适用于 Linux grep,因为 grep 不支持环视。
它绝对不漂亮,但它实际上只是将 4 个较小的正则表达式组合在一起,例如^(rule1|rule2|rule3B|rule3I)$
.
第一条规则是:
^.*\[(?![0-9][0-9]:[0-9][0-9]:[0-9][0-9]:[0-9][0-9]\]).*$
它匹配任何具有不属于 [00:00:00:00] 模式的“[”的行,使用负前瞻。
第二条规则是:
^.*\^(?![BI]).*$
它匹配任何带有“^”的行,而不是紧跟 B 或 I,再次使用负前瞻,以便它也将在行尾匹配。
第三条规则是一个doozie:
^([^\^\n]*\^[^B\n])*[^\^\n]*\^B([^\^\n]*\^[^B\n])*[^\^\n]*$
^B
它匹配任何一行与用于粗体的文字的一个实例。该([^\^\n]*\^[^B\n])*[^\^\n]*
部分匹配任何不匹配的内容^B
,并且该\^B
部分匹配^B
。我已经包含\n
以防止记事本++中的多行匹配。\n
如果您正在使用 grep 或任何已经在执行逐行正则表达式搜索的程序,则可以删除's。
第四条规则就是第三条规则,用“I”代替“B”。