Регулярное выражение, сравнивающее запись с предыдущей записью
Мне нужно регулярное выражение для поиска в текстовом файле и найти каждую строку, которая начинается с "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+ символами, кроме символов разрыва строки (.
совпадения новой строки должны быть ВЫКЛ)