<p>您要求匹配从<code>REST</code>到<code>HAB:</code>的文本(不包括<code>REST</code>),实际上没有帮助,它不会对匹配产生太大影响,但是<code>HAB:</code>之后的文本不能是<code>REST</code>,因为它会阻止有效的匹配。你知道吗</p>
<p>你可以用</p>
<pre><code>(REST).*?HAB:\s*(?!REST(?!\S))(\S+)
</code></pre>
<p>参见<a href="https://regex101.com/r/kN7hvR/4" rel="nofollow noreferrer">regex demo</a></p>
<p><strong>细节</strong></p>
<ul>
<li><code>(REST)</code>-第1组:一个<code>REST</code>子串</li>
<li><code>.*?</code>-除换行符以外的任何0+字符,尽可能少</li>
<li><code>HAB:</code>-a <code>HAB:</code>文字子串</li>
<li><code>\s*</code>-0+空格</li>
<li><code>(?!REST(?!\S))</code>-如果在当前位置的右侧紧跟着有<code>REST</code>后跟空格或字符串结尾,则会导致匹配失败的负前瞻</li>
<li><code>(\S+)</code>-第2组:任何1+非空白字符。你知道吗</li>
</ul>
<p><a href="http://rextester.com/JXK75503" rel="nofollow noreferrer">Python code demo</a>:</p>
<pre><code>import re
rx = r"(REST).*?HAB:\s*(?!REST(?!\S))(\S+)"
s = """REST gfdjj REST HAB: 75RF-3729-70D-01 CLUE HAB: 234-543 REST tt HAB: 75RF-3729-70D-02 CLUE ytr HAB: 34829-5467 REST HAB: 75RF-3729-70D-03 REST REST REST HAB: 54783-04 REST HA: 837483 REST dfhjdf REST 347845-34 REST rehs HAB: 45923\nREST HAB: REST sdfdgdsd HAB: 456734"""
res = ["{} {}".format(x.group(1),x.group(2)) for x in re.finditer(rx, s)]
print(res)
# => ['REST 75RF-3729-70D-01', 'REST 75RF-3729-70D-02', 'REST 75RF-3729-70D-03',
# 'REST 54783-04', 'REST 45923', 'REST 456734']
</code></pre>