正则表达式比较一条记录和前一条记录

regular expression comparing a record with a previous record

我需要一个正则表达式来在文本文件中搜索并找到以 "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

谢谢!

看来你可以使用

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

详情:

  • (?:\G\R?|^(?!CR).*\R) - 文档的开头或上一个成功匹配的结尾 (\G),后跟一个可选的换行符 (\R?),或者一行的开头 (^) 后不跟 CR ((?!CR)) 后跟除换行符以外的任何 0+ 字符 (.*) 后跟换行符 (\R)
  • \K - 匹配重置运算符丢弃目前匹配的文本
  • CD.* - CD 后跟除换行符以外的任何 0+ 个字符(. 匹配换行符 必须关闭)