<p>您可以使用3个捕获组来获取数字,并确保使用<a href="https://www.regular-expressions.info/charclass.html" rel="nofollow noreferrer">character class</a>在<code>cm</code>或<code>mm</code>结束测量。你知道吗</p>
<pre><code>(?<!\S)(\d+\.\d+)x(\d+\.\d+)x(\d+\.\d+) [cm]m(?!\S)
</code></pre>
<p><strong>部分</strong></p>
<ul>
<li><code>(?<!\S)</code>负的lookback,断言直接在左边的不是非空格字符</li>
<li><code>(\d+\.\d+)x</code>捕获<strong>第1组,匹配1+个数字和小数部分,然后
匹配x</li>
<li><code>(\d+\.\d+)x</code>捕获<strong>第2组</strong>同上</li>
<li><code>(\d+.\d+) </code>捕获<strong>第3组</strong>匹配1+个数字和小数部分</li>
<li><code>[cm]m</code>匹配cm或mm</li>
<li><code>(?!\S)</code>负向前看,断言直接在左边的不是非空格字符</li>
</ul>
<p><a href="https://regex101.com/r/yBui9r/1" rel="nofollow noreferrer">Regex demo</a>| <a href="https://ideone.com/1nTYl5" rel="nofollow noreferrer">Python demo</a></p>
<p>例如</p>
<pre><code>import re
regex = r"(?<!\S)(\d+\.\d+)x(\d+\.\d+)x(\d+\.\d+) [cm]m(?!\S)"
test_str = "The study reveals a speculated nodule with pleural tagging at anterior basal segment of LLL, measured 1.9x1.4x2.0 cm in size"
print(re.findall(regex, test_str))
</code></pre>
<p>输出</p>
<pre><code>[('1.9', '1.4', '2.0')]
</code></pre>
<p>要获得包含<code>x</code>的输出,可以使用</p>
<pre><code>(?<!\S)(\d+\.\d+x\d+\.\d+x\d+\.\d+) [cm]m(?!\S)
</code></pre>
<p><a href="https://regex101.com/r/rUBdLN/1" rel="nofollow noreferrer">Regex demo</a>| <a href="https://ideone.com/llYD9W" rel="nofollow noreferrer">Python demo</a></p>
<p>输出</p>
<pre><code>['1.9x1.4x2.0']
</code></pre>
<p><strong>编辑</p>
<p>要仅匹配值并在数字和值之间允许1个或多个空格,可以使用正向先行:</p>
<pre><code>\d+(?:\.\d+)?(?:(?:x\d+(?:\.\d+)?)*)?(?=[ \t]+[cm]m)
</code></pre>
<p><a href="https://regex101.com/r/8NnW9D/1" rel="nofollow noreferrer">Regex</a></p>