金融数量和价格的大范围正则表达式

问题描述 投票:0回答:1

我正在对大量的财务数据进行一些数据挖掘,我需要找出两个匹配的python正则表达式:

价格,如:

16 666 666.67
16 666 666,67
666 666.67
5 567.1
5 677,1
0.0
0,101
5,4
5.40
54.0
5.675674754747457
5980990.009345
16,000.45
234,234,657.108

价格总是有昏迷或点。但是在昏迷之前可能有空格(空格需要一致,不像56 34.345

体积(数量),例如:

9898
5
450934
5,000
1,000
1,000,000
5,998
11
0
5 000
1 000 000
1 980 000 000
599
233 590
23 613
181 876 980

数量永远不会分开。它基本上不能有小数。

这是我试过的价格:(^[0-9]{0,}$)|(\d{1,}(?:[.,]\d{3})*(?:[.,]\d*))但是我没有处理空间。

对于音量来说,这对我来说非常复杂,因为到处都有空间!

非常感谢。

python regex price product-quantity
1个回答
2
投票

在这种情况下,我建议的不仅仅是正则表达式。

首先,标准化每一行是好的,因为有许多可接受的格式。我们将标准化,以便.始终是小数点分隔符,始终是千位分隔符:

if '.' not in line:
    # `,` is our separator, so replace with `.`
    line = line.replace(',', '.')
else:
    # `.` is our separator, so replace `,` with ` ` (does nothing if already space separated).
    line = line.replace(',', ' ')

现在,我们可以将正则表达式应用于line

^\d{1,3}(\s\d{3})*\.\d+$将与数千名分开的任何东西相匹配。 ^\d+\.\d+$将匹配任何没有数千分开的东西。

请注意,由于我们对线路进行了一些预处理,因此我们的正则表达式更简单。我将保留数量(应该更容易)并捕获适当的部分给你。

我还建议捕获整个字符串,然后在其上调用.replace(' ', '')去除空格,而不是试图在正则表达式中删除它们。

© www.soinside.com 2019 - 2024. All rights reserved.