<p>对于<em>CLD</em>和<em>REF</em>的不同迭代,您可以使用交替<code>|</code>和量词<code>+</code>重复1次或多次,以匹配其中任何一行开始的行</p>
<pre><code>^LIN.*\nSN.*\nPRF.*\nPID.*\n(?:(?:REF|CLD).*\n)+HL.*
</code></pre>
<p><strong>解释</strong></p>
<ul>
<li><code>^</code>字符串的开头</li>
<li><code>LIN.*\nSN.*\nPRF.*\nPID.*\n</code>匹配前4行</li>
<li><code>(?:(?:REF|CLD).*\n)+</code>重复1+次,匹配<code>REF</code>或<code>CLD</code>,行的其余部分和换行符</li>
<li><code>HL.*</code>匹配<code>HL</code>和该行的其余部分</li>
</ul>
<p><a href="https://regex101.com/r/I5rf8N/1" rel="nofollow noreferrer">Regex demo</a><a href="https://ideone.com/Mqdpuo" rel="nofollow noreferrer">Python demo</a></p>
<p>比如说</p>
<pre><code>import re
s = ("LIN**SI*ASN*BP*ITEM01*VP*1262702*CH*US\n"
"SN1**300*PC\n"
"PRF*5500015558****01\n"
"PID*F****DESCRIPTION01\n"
"REF*PK*000000051213\n"
"CLD*1*300*PLT71\n"
"REF*LS*0079393\n"
"HL*3*1*I\n"
"LIN**SI*ASN*BP*ITEM02*VP*1375541*CH*US\n"
"SN1**64*PC\n"
"PRF*5500014695****01\n"
"PID*F****DESCRIPTION02\n"
"REF*PK*000000051213\n"
"CLD*1*24*PLT71\n"
"REF*LS*0079393\n"
"CLD*1*40*PLT71\n"
"REF*LS*0079390\n"
"HL*4*1*I")
regex = r"^LIN.*\nSN.*\nPRF.*\nPID.*\n(?:(?:REF|CLD).*\n)+HL.*"
print(re.findall(regex, s, re.MULTILINE))
</code></pre>
<p>输出</p>
<pre><code>[
'LIN**SI*ASN*BP*ITEM01*VP*1262702*CH*US\nSN1**300*PC\nPRF*5500015558****01\nPID*F****DESCRIPTION01\nREF*PK*000000051213\nCLD*1*300*PLT71\nREF*LS*0079393\nHL*3*1*I',
'LIN**SI*ASN*BP*ITEM02*VP*1375541*CH*US\nSN1**64*PC\nPRF*5500014695****01\nPID*F****DESCRIPTION02\nREF*PK*000000051213\nCLD*1*24*PLT71\nREF*LS*0079393\nCLD*1*40*PLT71\nREF*LS*0079390\nHL*4*1*I'
]
</code></pre>