擅长:python、mysql、java
<p>您只需要从每个字符串中提取float/int,以及符号(<code>+</code>或{<cd2>}),然后将提取的部分传递给<code>float()</code>函数并进行排序。在</p>
<p>所以我提出的正则表达式(<a href="https://regex101.com/r/M1vNAb/4" rel="nofollow noreferrer">regex101</a>)是:</p>
<pre><code>(\+|-)\d+(\.\d+)?
</code></pre>
<p>因此,我们检查float/int前面是否有<code>+</code>或<code>-</code>,然后尽可能多地匹配小数点(<code>.</code>),然后尽可能多地匹配小数点后的小数点——只有在有小数点的情况下。最后一部分(“只有在存在的情况下”)是通过一个<code>?</code>-意思是<code>0</code>或{<cd9>}出现来实现的。在</p>
<p>现在要将此应用于Python,使用您的列表<code>l</code>,并且已经运行了<code>import re</code>,您可以用这一行对它进行排序:</p>
^{pr2}$
<p>在最后一个例子中,<code>l</code>为:</p>
<pre><code>['a5-_-12.0b.mrc', '-a11_-10.0.mrc', 'a + z_-x_y_+6.10334_a4.mrc', 'b-c_ab_+15.0_rs+t.mrc', 'a+101.9-.mrc']
</code></pre>
<p>我相信这是正确的!在</p>
<hr/>
<p>对于<code>listfromhell</code>示例,这实现了预期的输出:</p>
<pre><code>['a_-12.0_b.mrc', 'a_-10.0.mrc', 'a_+10.9.mrc', 'bc_ab_+15.0_rst.mrc', 'az_x_y_+60.13_a.hdf']
</code></pre>