ホーム>source

これはrestructuredTextのような小さなテキストです。

<前>ウィズウィズ

ヘッダーではない2行をキャッチし、文を残す正規表現が欲しいです タイトル。

  1. テスト#1: This is a sentence to catch. Title that should not be caught ------------------------------- Another sentence to catch. を終了する方法ライン。私は --- をやった 。ヘッダーの下に行を残します。それは私に与えます:
<前>ウィズウィズ
  1. テスト#2:行ヘッダーの上に文も残す方法( /^(?!(---))[^\n]+/gm )?私は This is a sentence to catch. Title that should not be caught Another sentence to catch. を試しましたそしてそれは私に与えました:
<前>ウィズウィズ

問題は、それがキャッチしなかったことです前の手紙 ウィズウィズ私が欲しいのはキャッチではありません前の全文。私が欲しいのは:

<前>ウィズウィズ

どうすればよいですか?

編集:

うまくいくあなたの応答をありがとう(私はすべてを理解することは確かではありませんが、私はそれについて瞑想します...)。

同意する場合は、問題をさらに複雑に拡張してみましょう。新しいおもちゃの例:

<前>ウィズウィズ

ご覧のとおり、 Title that should not be caught を使用して別の種類の見出しを追加しました ライン。 Tânの正規表現では、次のようになります。

<前>ウィズウィズ
  1. テスト1bis: /^(?!(---))[^\n]+(?!\n---)/gm をテストしましたしかし、何もキャッチされません:(

参考までに、私は何かを実装しています倹約的 Pythonで。

This is a sentence to catch. Title that should not be caught Another sentence to catch.
あなたの答え
  • 解決した方法 # 1

    例のデータの単一の行を一致させる場合、一致する最初の行が---または===で始まっていないことを確認するという選択肢があります。

    最初の行を照合した後、文字列 $ の終わりをアサートします  そして、その行が---または===で始まっていない後、行をアサートする別の否定先読みを使用します

    <前>ウィズウィズ

    ウィズウィズ  文字列の始まり

    ウィズウィズ  否定的な先読み、直接右側にあるものはそうではないと主張する

    ウィズウィズ  いずれかの ^(?!(?:---|===)).+$(?!\r?\n(?:---|===)) に一致  または ^

    ウィズウィズ  先読みを閉じる

    ウィズウィズ  改行以外の任意の文字に1回以上一致し、文字列の終わりをアサートします

    ウィズウィズ  改行が追加された最初の先読み

    正規表現のデモ| Pythonデモ

  • 解決した方法 # 2

    このパターンをプログラミング言語で使用してみてください: (?!

    これは、JavaScript言語を使用した例です(メイン言語では、パターンを変更する必要はありません)。

    ウィズウィズ
    

  • 解決した方法 # 3

    Linux(特にUbuntu)を使用している場合は、これを試すことができます。

    ウィズウィズ
    ウィズウィズ
    
    (?:---|===)

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ javascript - 複数の文字の出現回数と正確に一致する