Регулярное выражение, сравнивающее запись с предыдущей записью

Мне нужно регулярное выражение для поиска в текстовом файле и найти каждую строку, которая начинается с "CD", когда предыдущая строка НЕ ​​начинается с "CR".

В приведенных ниже примерах данных обратите внимание в конце, где есть строки CD, у которых нет предшествующей записи CR. Мне нужен поиск, чтобы найти эти строки CD.

HDPM0021535 11ABC CO. D 
CRVA MC OP-MATHER CA 1053 
CD1010 BD5275555
TR+00000001+00000000+0000024760 
HDPM0021535 11ABC CO. D 
CROMNICARE RENO 48308 9475 
CD3055 BO9182000
CROCR OF SANTA ROSA 48218 879 
CD3055 BC9832555
TR+00000002+00000000+0000000695 
HDPM0021535 11ABC CO. D 
CD2037 AF7944888
CD2037 AF7944888
TR+00000002+00000001-0000000089 
TT+00000008+0000196660200

Спасибо!

1 ответ

Решение

Кажется, вы можете использовать

(?:\G\R?|^(?!CR).*\R)\KCD.*

Детали:

  • (?:\G\R?|^(?!CR).*\R) - либо начало документа, либо конец предыдущего успешного совпадения (\G) с дополнительным переводом строки (\R?), или начало строки (^) не сопровождается CR ((?!CR)) с последующими 0+ символами, кроме символов разрыва строки (.*) с последующим переводом строки (\R)
  • \K - оператор сброса совпадений, отбрасывающий найденный текст
  • CD.* - CD с последующими 0+ символами, кроме символов разрыва строки (.совпадения новой строки должны быть ВЫКЛ)

введите описание изображения здесь

Другие вопросы по тегам