擅长:python、mysql、java
<p>我处理这样一个解析任务的方法(我很高兴听到其他的意见)是将函数分解成几个部分,每个部分标识输入字符串中的一条信息。你知道吗</p>
<p>例如,我首先确定可以从字符串中解析出什么浮点数,暂时忽略货币和数量级(一百万,一千):</p>
<p><code>f = float(''.join([c for c in input_str if c in '0123456789.']))</code></p>
<p>(由于添加了类似于“est”的内容,您可能希望在结尾有一个点时添加错误处理。)</p>
<p>然后,在第二步中,确定是否需要将浮点相乘以调整正确的数量级。一种方法是使用多个if语句:</p>
<pre><code>if 'million' in input_str :
oom = 6
elif 'thousand' in input_str :
oom = 3
else :
oom = 1
# adjust number for order of magnitude
f = f*math.pow(10, oom)
</code></pre>
<p>当然,可以通过使用正则表达式来改进这些检查,以解释格式上的细微差异。你知道吗</p>
<p>最后,使用一个或多个if语句分别确定输入字符串中提到的货币:</p>
<pre><code>if '£' in input_str :
currency = 'GBP'
else :
currency = 'USD'
</code></pre>
<p>现在还有一种情况,这个还没有处理,那就是破折号,给出了上下估计。使函数与这些输入一起工作的一种方法是在破折号上拆分初始输入字符串,并使用第一个(或第二个)子字符串作为初始浮点解析的输入。因此,我们将第一行代码替换为如下内容:</p>
<pre><code>if '-' in input_str :
lower = input_str.split('-')[0]
f = float(''.join([c for c in lower if c in '0123456789.']))
else :
f = float(''.join([c for c in input_str if c in '0123456789.']))
</code></pre>