1

私は、法律書の判例集の編集に取り組んでいます。タグを検索および置換操作に使用できるように HTML に変換しました。現在、Kate で作業しています。テキストは事例の名前を参照し、事例の引用は脚注に記載されています。

<i>Smith v Jones</i>127 ......... [other stuff including newline characters].......</br>127 (1937) 173 ER 406;

以下を使用して、Kateで先読みを行うことができました。

<i>.*</i>([0-9]{1,4}) .+<br/>\1 .*<br/>

...しかし、貪欲の問題に遭遇しました。

テキストがごちゃごちゃしているので、バッチ プロセスに頼るのではなく、段階的に一致を見つける必要があります。

先読み演算子と貪欲でない演算子の両方をサポートする Linux (または Windows) テキスト エディターはありますか? それとも、grep または sed を試す必要がありますか?

4

1 に答える 1

1

私は Kate に詳しくありませんが、多くの重要な点で他の Perl ライクな正規表現フレーバーと互換性がないQRegExpを使用しているようです。たとえば、ほとんどのフレーバーでは、疑問符 (たとえば.*=> .+?) を追加することで、個々の量指定子を貪欲でないようにすることができますが、QRegExp では、それらをすべて貪欲にするか、すべて貪欲でないようにすることしかできません。さらに悪いことに、Kate はそれを許可していないようですNon-Greedy(たとえば、チェックボックスを介して)。

しかし、貪欲でない量指定子に常に頼らないことが最善です。1 つには、多くの人が言うように、可能な限り最短の一致を保証するものではありません。それほど難しくない場合は、一致させる必要があるものと一致させないものについて、より具体的にする習慣を身に付ける必要があります。たとえば、一致させたいセクションにサンプル文字列以外のタグが含まれていない場合は、次のようにすることができます。

<i>[^<]*</i>(\d+)\b[^<]+<br/>\1\b[^<]*<br/>

[^<]*の代わりに使用する利点は.*、次の<. .*常に最初にドキュメントの残りを取得しますが、開始点までほぼずっとバックトラックするだけです。非貪欲なバージョン は.*?、最初は次の のみに<一致しますが、後で一致の試みが失敗した場合は、先に進み<、 以降を消費し、最終的にドキュメント全体を消費します。

他のタグがある場合は、代わりに使用できます[^<]*(<(?!br/>)[^<]*)*<ではない文字、またはタグ<の先頭ではない文字を消費します。<br/>

<i>[^<]*</i>(\d+)\b[^<]*(<(?!br/>)[^<]*)*<br/>\1\b[^<]*(<(?!br/>)[^<]*)*<br/>

ところで、あなたが先読みと呼んでいるもの (私はあなたが意味していると仮定しています\1) は、実際にはbackreferenceです。(?!br/>)私の正規表現の は、先読みの例です。この場合は、否定的な先読みです。Kate/QRegExp ドキュメントは、先読みはサポートされているが、非キャプチャ グループ (たとえば、-) はサポートされていないと主張して(?:...)います。これが、最後の正規表現ですべてのキャプチャ グループを使用した理由です。

別のエディターに切り替えるオプションがある場合は、そうすることを強くお勧めします。私のお気に入りはEditPad Proです。これは、私が今までエディタで見た中で最高の正規表現サポートを備えています。

于 2012-09-09T02:09:55.337 に答える