<p>你可以用</p>
<pre class="lang-py prettyprint-override"><code>import re
rx = r'\b([A-Za-z]+)\b.*?\s(\d+(?:\.\d+)?)(?!\S)'
texts = ["Fluid 13.4","Fluid 13.4 gm% fluid_haemo 12.0-14.0","Fluid gm% 13.4 fluid_haemo 12.0-14.0","Fluid gm% fluid_hameo 12.0-14.0 13.4"]
for text in texts:
match = re.search(rx, text)
if match:
print(text, '=>', f'{match.group(1)} {match.group(2)}')
# => Fluid 13.4 => Fluid 13.4
# Fluid 13.4 gm% fluid_haemo 12.0-14.0 => Fluid 13.4
# Fluid gm% 13.4 fluid_haemo 12.0-14.0 => Fluid 13.4
# Fluid gm% fluid_hameo 12.0-14.0 13.4 => Fluid 13.4
</code></pre>
<p>见<a href="https://ideone.com/LCHsV3" rel="nofollow noreferrer">Python demo</a>和<a href="https://regex101.com/r/Yb3qxG/1" rel="nofollow noreferrer">regex demo</a></p>
<p><em>详细信息</em>:</p>
<ul>
<li><code>\b</code>-单词边界</li>
<li><code>([A-Za-z]+)</code>-第1组:ASCII字母单词</li>
<li><code>\b</code>-单词边界</li>
<li><code>.*?</code>-除换行符以外的任何零个或多个字符,尽可能少</li>
<li><code>\s</code>-一个空格</li>
<li><code>(\d+(?:\.\d+)?)</code>-第2组:一个或多个数字,然后是一个<code>.</code>和一个或多个数字的可选序列</li>
<li><code>(?!\S)</code>-右侧空白边界</李>
</ul>