我正在开发一个 C# 应用程序,用于从 .x12 (txt) 文件中提取可重复的模式。我已经能够构建 PCRE 正则表达式来完成任务,但无法将其适应 C# 的正则表达式。
下面是我试图隔离的文本:
HL*1**20*1~
PER*IC*XX HEALTH XXXX XXXXX*TE*6822363000*FX*6822364615~
NM1*87*2~
N3*2448 XXXXX DR~
N4*XXXX XXXX*XX*761089998~
DMG*D8*19530804*F~
NM1*PR*2*XXXXXX MEDICAL MANAGEMENT*****PI*95958~
CLM*1111111111*3291.69***13:A:1**A*Y*Y~
DTP*434*RD8*20160714-20160714~
CL1*3*2*01~
HCP*03*480.01~
NM1*71*1*XXXXXXX*XXXXXXXX****XX*1111111111~
SBR*P*18*UDF******CI~
NM1*IL*1*XXXX*XXXXXXX*A***MI*509180801~
LX*1~
SV2*0250**44.19*UN*1~
DTP*472*D8*20160714~
SVD*95958*0.00**0250*1~
DTP*573*D8*20160726~
LX*2~
SV2*0311*HC:88172*936.25*UN*1~
DTP*472*D8*20160714~
SVD*95958*0.00*HC:88172*0311*1~
CAS*CO*97*936.25~
DTP*573*D8*20160726~
LX*3~
SV2*0311*HC:88173*477.25*UN*1~
DTP*472*D8*20160714~
SVD*95958*0.00*HC:88173*0311*1~
CAS*CO*97*477.25~
DTP*573*D8*20160726~
LX*4~
SV2*0312*HC:88305*456.5*UN*1~
DTP*472*D8*20160714~
SVD*95958*0.00*HC:88305*0312*1~
CAS*CO*97*456.5~
DTP*573*D8*20160726~
LX*5~
SV2*0360*HC:10022*483.75*UN*1~
DTP*472*D8*20160714~
SVD*95958*225.41*HC:10022*0360*1~
CAS*PR*3*250~
DTP*573*D8*20160726~
LX*6~
SV2*0402*HC:76942*893.75*UN*1~
DTP*472*D8*20160714~
SVD*95958*0.00*HC:76942*0402*1~
CAS*CO*97*893.75~
DTP*573*D8*20160726~
HL*3**20*1~ <-- FIND UP TO THIS LINE, BUT EXCLUDE FROM RESULTS
我知道这是一段很长的文字。因此,每个正则表达式匹配都包含两行以 HL 开头的行,并转到以 DTP 开头的行,该行位于花药 HL 之前,但不包括下一个 HL。
然后我在notepad++中使用的PCRE正则表达式如下。我已经输入了我的理解和目标后记:
^HL(.+?)DTP(.+?)~(?=([ ]*HL))
我不确定这看起来有多令人畏惧,但如果能朝正确的方向推动,我们将不胜感激。
如果我理解你的意思,你想捕获所有 DTP 行 为了便于阅读,以下由 # 记录的正则表达式是 dotnet :
^HL # strat with HL
.+? # any character ,one or more, as few as possible
(
(?<dtp>DTP.+?~) # named group start with DTP
# any character ,one or more, as few as possible
# ~
(.+?)
(?=DTP) # match DTP but exclude it from capture
)+
我测试过: http://regexstorm.net/tester
捕获的群体是:
DTP*434*RD8*20160714-20160714~
DTP*472*D8*20160714~
DTP*573*D8*20160726~
DTP*472*D8*20160714~
DTP*573*D8*20160726~
DTP*472*D8*20160714~
DTP*573*D8*20160726~
DTP*472*D8*20160714~
DTP*573*D8*20160726~
DTP*472*D8*20160714~
DTP*573*D8*20160726~
DTP*472*D8*20160714~
尝试一下:http://regexstorm.net/tester
选项:忽略空格/单行/多行
感谢大家的回复。 我能够使用以下正则表达式实现我尝试的目标,并希望跟进以可能在将来帮助某人。
^HL[\w\s*~.:-,@() ]?DTP[\w*]~
再次感谢