我在Shell 2字幕中有一个带有Ghost的.srt文件,我希望清除每个对话框,除了引文和引用的译者引用。所以在:
66
00:12:50,035 --> 00:12:54,096
"What's the point of blaming the mirror
if you don't like what you see."
[Trans. Note: He's quoting Nikolai Vasilevich Gogol.]
我想只选择:
"What's the point of blaming the mirror
if you don't like what you see."
[Trans. Note: He's quoting Nikolai Vasilevich Gogol.]
到目前为止,我得到了这个:
("[\s\S]+?"[[\s\S]+?])
但是这个有问题,因为它选择了“foobar”和[foobar]之间的文本片段,如下所示:
"If our gods and our hopes are nothing but scientific phenomena,
then it must be said that our love is scientific as well"
2
00:01:05,732 --> 00:01:08,098
Repo-202 calling air traffic control.
3
00:01:08,201 --> 00:01:09,725
We've arrived over the site.
[The kanji means "Look"]
我只想在他们在一起时选择“引用”[注释]。
答案 0 :(得分:1)
我只想在他们在一起时选择“引用”[注释]。
但是,在您的情况下,它们不:引号和方括号之间有一个换行符分隔符。您需要修改表达式以解决该问题。当然,你还需要摆脱方括号。
此外,您应该使用阻止回溯的表达式替换内容[\s\S]+?
的不情愿的限定表达式,如下所示:
("[^"]+"\s\[[^\]]+\])
最后,您需要打开正则表达式引擎的“多行”选项。这是特定于您的正则表达式环境 - 在Java中,您使用MULTILINE
模式;在.NET中它是RegexOptions.Multiline
,依此类推。
答案 1 :(得分:0)
这是一种删除Perl或PCRE正则表达式中的坏行的方法。例如,您可以在使用PCRE的Notepad ++中执行此操作。 The demo向您显示选择了错误的行。
(?m)^\s*(?:(\[(?:[^][]++|(?1))*\])|(?<!\\)"(?:\\"|[^"])*+")(*SKIP)(*F)|.*
基本上,主|
交替运算符左侧的表达式匹配所有完整括号和双引号字符串,然后故意失败并跳转到字符串中的下一个位置。这使得.*
最后可以自由地匹配剩余的行,这些行是您要替换的行。
有关其工作原理的详细信息,请参阅有关Matching (or replacing) a pattern, excluding....。
的问题