Как захватить пару строк вокруг совпадения с регулярным выражением?

8

Я ищу выражение регулярного выражения, чтобы соответствовать пару строк по сопоставленной линии. Например:

ABCDEFGHADEFGH
ABCDEFGHADEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
XXXXXXXX

Я хотел бы захватить 2 строки выше XXXXXXXX.

Любая помощь будет оценена. Примечание: с Python, использующим библиотеку re

takobaba
источник
1
Используя какое программное обеспечение? Различные программы имеют разные представления о том, что такое регулярное выражение.
Дэвид Ричерби
Использование Python специально или в любом инструменте / языке?
Кенорб
Если вы используете python, может быть лучше выгрузить целое в массив, где каждая строка является собственным элементом. Затем вы перебираете массив, находя XXXXXXXX, после того как найдены, используйте индекс этого элемента -1 и -2, чтобы получить строки.
LPChip
привет человек спасибо за совет, я сделал это уже с циклом for, но интересно, как сделать с регулярным выражением
Такобаба

Ответы:

15

Следующий RegEx проверяет переменное количество строк перед XXXXXXXXстрокой и возвращает их в первую группу захвата.

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

  1. (.*\n)проверяет строку, заканчивающуюся \nсимволом новой строки.
  2. {2} количественно это 2 раза.
  3. () вокруг этого все линии объединяются в одну группу захвата.
  4. XXXXXXXX строка, которой должен заканчиваться текст

Теперь в Python вы можете использовать p.match(regex)[0]для возврата первой группы захвата.

erikgaal
источник
4
Будьте осторожны, это может вызвать проблемы в Windows. Если это так, попробуйте \r\nвместо просто \n.
Qix - МОНИКА БЫЛА ПЛОЩАДЬ
1
Конечно, это будет соответствовать только строке, которая начинается с XXXXXXXX(но не обязательно заканчивается XXXXXXXX).
G-Man говорит: «Восстановите Монику»
0

Добавляя к ответу erikgaal, используйте дополнительный. * Перед xxxxxx, чтобы сопоставить любые табуляции / пробелы.

((. * \ П) {2}). * XXXXXXX

Сурадж Равиндра Хурана
источник
1
Ну, .*не будет совпадать только с табуляцией / пробелами; это будет соответствовать чему-либо (например, "быстрый коричневый XXXXXXX").
G-Man говорит: «Восстанови Монику»