0

我正在检查我的字幕文件的格式是否正确。我正在寻找 3 个常见错误。

  1. 格式为“[00:01:22:00]”的时间戳 - 有时会忘记匹配的 ]。所以我想检查如果“[”出现在一行上,它正好有上面格式的11个字符,然后是一个匹配的“]”。常见的错误是缺少匹配的]
  2. 粗体和斜体 - 如果 ^B 或 ^I 出现在一行中,则必须在同一行中有匹配的 ^B 或 ^I。
  3. 如果 ^ 出现在一行上,则后面必须跟着 I 或 B
4

1 回答 1

1

一个执行所有这些操作的正则表达式:

^(.*\[(?![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”。

于 2013-10-19T07:55:40.893 回答