擅长:python、mysql、java
<p>你的问题没有很好的定义,但是没有必要进行机器学习。可能的货币集合是有限的和小的,货币表示的集合不能太复杂以至于不能像正则表达式那样表达。您只是没有充分利用正则表达式的功能。在</p>
<p>例如,要匹配多个货币,请使用:</p>
<pre><code> currency = r"((USD)|(GBP)(...))"
</code></pre>
<p>然后可以表示表示的数字部分</p>
^{pr2}$
<p>编译正则表达式:</p>
<pre><code> matcher = re.compile(numbers+r"[\s]*+"currency)
</code></pre>
<p>您可以创建第二个匹配器,首先匹配货币。您可能可以在可选的捕获组等中使用一些聪明的方法,但是如果性能不是一个大问题,我建议使用一个简单的第二匹配器。在</p>
<pre><code> matcher2 = re.compile(currency+r"[\s]*"+numbers)
</code></pre>
<p>请注意,“currency”正则表达式不需要手动创建。一旦找到匹配项,就可以访问相应的组号(1或3)以获取匹配的货币。例如:</p>
<pre><code> curren = m.group(1)
amount = m.group(2)
</code></pre>
<p>这是可能的,因为整个“货币”regex被视为一个组。在</p>
<p>除非您的输入中有无限的货币表示模式(可能不可能),否则您的问题肯定可以通过适当的正则表达式来解决。在</p>