0

Ghost in the Shell 2 の字幕を含む .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"]

一緒にいるときに「引用」[注]を選択したいだけです。

4

2 に答える 2

1

一緒にいるときに「引用」[注]を選択したいだけです。

ただし、あなたの場合は一緒ではありません。引用符と角括弧の間に改行区切りがあります。それを考慮して表現を変更する必要があります。もちろん、角かっこもエスケープする必要があります。

さらに、次のように、しぶしぶ修飾されたコンテンツ[\s\S]+?の式を、バックトラッキングを防止する式に置き換える必要があります。

("[^"]+"\s\[[^\]]+\])

最後に、正規表現エンジンの「複数行」オプションをオンにする必要があります。これは正規表現環境に固有のものです。Java ではMULTILINEモードを使用します。.NET ではRegexOptions.Multilineなどです。

于 2013-10-20T12:06:46.747 に答える
0

Perl または PCRE 正規表現の不正な行を削除する方法を次に示します。たとえば、PCRE を使用する Notepad++ でこれを行うことができます。デモは、不良ラインが選択されていることを示しています。

(?m)^\s*(?:(\[(?:[^][]++|(?1))*\])|(?<!\\)"(?:\\"|[^"])*+")(*SKIP)(*F)|.*

基本的に、メインの代替演算子の左側にある式は、|すべての大かっこと二重引用符で囲まれた文字列に一致し、意図的に失敗して文字列内の次の位置にスキップします。これにより.*、残りの行 (置換する行) と一致するように最後の行が解放されます。

これがどのように機能するかの詳細については、除外するパターンのマッチング (または置換)に関するこの質問を参照してください。

于 2014-06-16T09:36:32.800 に答える