<p>在您尝试的模式中,此部分<code>(?<=\s)(\d*\s*)</code>匹配可选数字,后跟可选空格字符,而左侧必须直接有空格字符</p>
<p>这还将获得字符串中左侧有whitspace字符的所有位置,因为匹配中的数字和空白字符是可选的</p>
<p>在这部分<code>(\d*\.\d*)$</code>中,数字是可选的,因此它也可以只匹配字符串末尾的一个点</p>
<hr/>
<p>如果结尾的数字前必须有空格字符,可以使用:</p>
<pre><code>(?<=\s)\d{1,3}(?:\.\d{3})*$
</code></pre>
<p>模式匹配:</p>
<ul>
<li><code>(?<=\s)</code>正向查找,在当前位置左侧断言一个whitspace字符</li>
<li><code>\d{1,3}</code>匹配1-3个数字</li>
<li><code>(?:\.\d{3})*</code>可选地重复一个点和3个数字</li>
<li><code>$</code>字符串的结尾</li>
</ul>
<p>见a <a href="https://regex101.com/r/IDFC6M/1" rel="nofollow noreferrer">regex demo</a></p>
<p>如果数字本身也可以是,则可以在左侧<code>(?<!\S)</code>断言一个空白边界</p>
<pre><code>(?<!\S)\d{1,3}(?:\.\d{3})*$
</code></pre>
<p>另见<a href="https://regex101.com/r/ZY7ddu/1" rel="nofollow noreferrer">regex demo</a></p>
<p>例如,使用<code>str.extract</code>并将模式包装到捕获组中:</p>
<pre><code>import pandas as pd
strings = [
"VISTA AES TIETE E UNT N2 600",
"VISTA IT AUUNIBANCO PN N1 1.400",
"OPCAO DE VENDA 04/21 COGNP450ON 4,50COGNE 100.000"
]
df = pd.DataFrame(strings, columns=["colName"])
df['lastNumbers'] = df['colName'].str.extract(r"(?<=\s)(\d{1,3}(?:\.\d{3})*)$")
print(df)
</code></pre>
<p>输出</p>
<pre><code> colName lastNumbers
0 VISTA AES TIETE E UNT N2 600 600
1 VISTA IT AUUNIBANCO PN N1 1.400 1.400
2 OPCAO DE VENDA 04/21 COGNP450ON 4,50COGNE 100.000 100.000
</code></pre>