正規表現一致の周りの数行をキャプチャする方法は?


8

一致する行のいくつかの行に一致する正規表現を探しています。例えば:

ABCDEFGHADEFGH
ABCDEFGHADEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
XXXXXXXX

XXXXXXXXの上の2行をキャプチャします。

任意の助けいただければ幸いです。注:Pythonでライブラリreを使用


1
どのソフトウェアを使用していますか?正規表現が何であるかについては、プログラムによってアイデアが異なります。
David Richerby、2015

具体的に、または任意のツール/言語でPythonを使用していますか?
kenorb 2015

Pythonを使用している場合は、全体を配列にダンプする方がよい場合があります。各行は独自の要素です。次に、配列をループしてXXXXXXXXを見つけます。見つかったら、その項目のインデックス-1および-2を使用して行を取得します。
LPChip 2015

こんにちはアドバイスに感謝します。私はすでにforループでそれを行いましたが、正規表現でどうすればいいのか疑問に思います
takobaba

回答:


15

次のRegExは、行の前の可変量の行をテストし、XXXXXXXXそれらを最初のキャプチャグループに返します。

((.*\n){2})XXXXXXXX

  1. (.*\n)\n改行で終わる文字列をテストします。
  2. {2} これを2回定量化します。
  3. () これにより、すべてのラインが1つのキャプチャグループに含まれるようになります。
  4. XXXXXXXX テキストが終了しなければならない文字列です。

Pythonでは、を使用p.match(regex)[0]して最初のキャプチャグループを返すことができます。


4
これがWindowsで問題を引き起こす可能性があることに注意してください。ある場合は、\r\n単にの代わりに試してください\n
Qix-モニカは2015

1
もちろん、これはのみ行一致する始まりとをXXXXXXXX(が、それは必ずしもで終わっていませんXXXXXXXX)。
G-Manは

0

erikgaalの回答に追加して、xxx​​xxxの前に余分な。*を使用して、タブ/空白に一致させます。

((。* \ n){2})。* xxxxxxx


1
まあ、タブ/スペースだけ.*とは一致しません。それはすべてに一致します(たとえば、「The quick brown XXXXXXX」)。
G-Manは
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.