<h2>问题</h2>
<p>如果我错了,请纠正我,但实际上你是在试图删除符号之类的东西,只留下任何尾随数字,对吗?你知道吗</p>
<blockquote>
<p>I would like to split before the first occurrence of any digit</p>
</blockquote>
<p>我觉得,这是构建您正试图解决的regex问题的最简单方法。你知道吗</p>
<p>你知道吗</p>
<h2>解决方案</h2>
<pre><code># -*- coding: utf-8 -*-
import re
# Match any contiguous non-digit characters
regex = re.compile(r"\D+")
# Input list
prices_list = ["CNY1234", "$ 4.421,00", "PHP1,000", "€432"]
# Regex mapping
desired_output = map(lambda price: regex.split(price, 1)[-1], prices_list)
</code></pre>
<p>这给了我<code>['1234', '4.421,00', '1,000', '432']</code>作为输出。你知道吗</p>
<p>你知道吗</p>
<h2>解释</h2>
<p>之所以这样做是因为lambda和map函数。基本上,map函数接受lambda(一个可移植的单行函数,如果您愿意的话),并对列表中的每个元素执行它。负索引采用<code>split</code>方法生成的匹配列表的最后一个元素</p>
<p>基本上,这是因为假设您不希望输出中有任何初始非数字。你知道吗</p>
<p>你知道吗</p>
<h2>注意事项</h2>
<ul>
<li><p>此代码不仅在结果子字符串中保留<code>.</code>和<code>,</code>,而且在结果子字符串中保留所有字符。因此,<code>"$10e7"</code>的输入字符串将输出为<code>'10e7'</code>。</p></li>
<li><p>如果只使用数字和<code>.</code>和<code>,</code>,例如<code>"10.00"</code>作为输入字符串,则会在输出列表的相应位置获得<code>'00'</code>。</p></li>
</ul>
<p>如果这些都不是您想要的行为,那么您就必须去掉<code>regex.split(price, 1)</code>旁边的负索引,并对得到的列表列表进行进一步处理,这样您就可以处理使用regex时出现的所有讨厌的边缘情况。你知道吗</p>
<p>不管是哪种方式,我都会尝试用更极端的例子来证明这是你需要的。你知道吗</p>